阅读《Android 从入门到精通》(33)——Intent 分类

Intent 分类

显式 Intent:Intent("android.intent.action.CALL", Uri.parse("tel:" + string));
需要指明名字启动,用于程序内多 Activity 交互,通常用于应用程序内部消息,有名 Action Intent。
隐式 Intent:一般不指明名字,而是采用广播的形式,通常是 Broadcast Intent。

Action Intent:


动作很大程度上决定了剩下的 Intent 如何构建,特别是数据(data)和附加(extras)字段,就像一个方法名决定了参数和返回值。因此,Intent 对象动作通过 setAction 设置后,具体的 Action 具有具体的数据格式要求。比如:ACTION_EDIT 的数据字段将包含用于编辑文档的 URL;ACTION_CALL 则是 tel:URL。此外,还应了解数据格式类型,比如获取的数据是音频、视频、文字、图像还是其他,这就需要通过 setType 指定 MIME,常用的 Category 如下:

CATEGORY_BROWSABLE
CATEGORY_GADGET
CATEGORY_HOME
CATEGORY_LAUNCHER
CATEGORY_PREFERENCE

addCategory 用于添加一个种类到 Intent,与此对应的是 removeCategory 用于删除前一个种类,一个Intent 可以有多个 Category,getCategories 用于获取 Intent 中的所有种类

Broadcast Intent

Action Intent 只能被一个指定的 Activity 响应,如果需要推送通知这样的广播信息,则需要 Broadcast Intent

Broadcast Intent 处理流程


注册 Broadcast Intent 步骤

继承 BroadcastReceiver,并重写 onReceiver 方法:

package com.sweetlover.camera2basic;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class MyReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context arg0, Intent arg1) {
		// TODO Auto-generated method stub
		
	}

}

根据 IntentFilter 注册 Broadcast Intent

Java 注册

IntentFilter myFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVER");
MyReceiver myReceiver = new MyReceiver();
Context.registerReceiver(myReceiver, myFilter);

XML 注册

<receiver android:name=".MyReceiver">
	<intent-filter>
		<action android:name="<receiver android:name=".MyReceiver">
	</intent-filter>
</receiver>

广播


接收

Broadcast Receiver 接收到 Intent 后对其判断,符合条件则响应 onReceiver 方法

public void onReceiver(Context myContext, Intent myIntent) {
	if (myIntent.getAction().equals(Intent.ACTION_BATTERY_LOW)) {
		// TODO 电量低时切换到节电模式,关闭 WIFI 和 GPS
	}
}

销毁

每当 Receiver 响应一个 Intent 后就被自动销毁,Receiver 有时间限制,超时则认为程序无响应

具体示例

1.MainActivity.java

@Override
protected void onStart() {
	// TODO Auto-generated method stub
	super.onStart();
		
	try {
		Thread.sleep(5000);
	} catch (InterruptedException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	final Intent intent = new Intent(MY_NEW_LIFEFORM);
	sendBroadcast(intent);
}

2.Receiver.java

package com.sweetlover.activity;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class Receiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
		Toast.makeText(context, "收到广播信息", Toast.LENGTH_SHORT).show();
	}
}

3.activity_main.xml

添加一个空的 LinearLayout 布局即可

4.AndroidManifest.xml

在 <application> 标签里面添加

        <receiver android:name="com.sweetlover.activity.Receiver">
            <intent-filter>
                <action android:name="com.china.ui.NEW_LIFEFORM" />
            </intent-filter>
        </receiver>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android从入门到精通是一个较为庞大的话题,无法在短时间内详细覆盖所有内容。不过,我可以给你提供一个大致的学习路径和一些重要的主题,帮助你入门并逐步提升技能。 1. Java基础:Android开发主要使用Java语言,所以你需要对Java有一定的了解。学习Java的基本语法、面向对象编程、异常处理等。 2. Android基础知识:学习Android的核心组件,包括Activity、FragmentIntent等,了解Android应用的生命周期和各个组件之间的交互。 3. 布局和视图:学习如何使用XML文件创建Android应用的界面布局,以及如何使用不同类型的视图(View)来构建用户界面。 4. 用户交互:学习如何处理用户的输入事件,包括点击按钮、滑动手势等。了解如何使用Toast、Dialog、Snackbar等来向用户显示信息。 5. 数据存储:学习如何使用SQLite数据库进行数据的持久化存储,以及如何使用SharedPreferences进行简单的数据存储。 6. 网络通信:学习如何使用HTTP协议发送和接收网络请求,以及如何解析JSON数据。了解常见的网络通信库,如OkHttp、Retrofit等。 7. 多媒体处理:学习如何使用Android提供的API来处理图片、音频和视频。了解如何使用Camera API进行拍照和录像。 8. 性能优化:学习如何优化Android应用的性能,包括减少内存占用、优化布局、优化网络请求等方面。 9. 安全性和权限管理:学习如何保护Android应用的数据安全,并了解如何处理用户权限请求和权限管理。 10. 第三方库和框架:学习如何使用常用的第三方库和框架来加快开发速度,如Glide、ButterKnife、Dagger等。 11. Material Design:学习如何使用Material Design风格来设计美观的用户界面,并了解Material Design的设计原则和组件。 12. 进阶主题:学习更高级的Android开发主题,如响应式编程(RxJava)、MVVM架构、测试和调试技巧等。 以上是一个大致的学习路径,你可以根据自己的兴趣和需求来选择深入学习的内容。同时,不断实践和项目开发也是提升技能的重要方式。希望这些信息对你有所帮助!如果你还有其他问题,可以继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值