极力推荐文章:欢迎收藏
Android 干货分享
阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android
Intent
是一个消息传递对象,主要用于组建之间的通讯,例如:启动Activity
、启动Service
、传递Broadcast
等
本篇文章主要介绍 Android
开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:
- Intent 主要用途、流程图
- Intent 分类
- 隐式 Intent 接收过滤类型
- PendingIntent 使用方法
- Intent 7 大常用属性
- 使用ADB调试 Intent
- Intent 常用方法使用总结
Intent 流程图
1. Intent 主要用途
1. 启动Activity
startActivity()
无返回值,直接启动Activity
startActivityForResult()
有返回值,返回值在onActivityResult() 回调
2. 启动Service
startService()
一次性操作bindService()
绑定组件,随组件生命周期结束而结束
3. 传递 Broadcast
sendBroadcast()
普通无序广播sendOrderedBroadcast()
有序广播sendStickyBroadcast()
持续黏性广播
2. Intent 分类
1.显示 Intent
按名称(完全限定类名)指定要启动的组件。
例如:
Intent intentActivity = new Intent(MainActivity.this,
ActivityMethods.class);
startActivity(intentActivity);
2.隐式 Intent
不会指定特定的组件,而是声明要执行的常规操作,从而允许其他应用中的组件来处理它
例如:
/**
* 发送短信
* **/
public static void SendMms(Context context, String mmsString) {
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, mmsString);
sendIntent.setType("text/plain");
// sendIntent.setData(Uri.parse("smsto:"));
// This ensures only SMS apps respond
// 修改 Intnent 选择器Tittle
String title = context.getResources().getString(R.string.hello_world);
Intent chooser = Intent.createChooser(sendIntent, title);
// 验证是否有Activity 接收
if (sendIntent.resolveActivity(context.getPackageManager()) != null) {
context.startActivity(chooser);
}
}
3. 隐式Intent 接收过滤类型
应用可以接收哪些隐式Intent
,请在清单文件中使用 <intent-filter>
元素为每个应用组件声明一个或多个 Intent
过滤器。每个Intent
过滤器均根据 Intent
的操作、数据和类别指定自身接受的Intent
类型。 仅当隐式Intent
可以通过Intent
过滤器之一传递时,系统才会将该 Intent
传递给应用组件。
在 name
属性中,声明接受的 Intent
操作。该值必须是操作的文本字符串值,而不是类常量。
例如:java
代码中启动的Intent
的Action
Intent sendIntent = new Intent("String_action");
Androidmanfest.xml 中过滤标签如下:
使用一个或多个指定数据 URI
各个方面(scheme、host、port、path
等)和 MIME
类型的属性,声明接受的数据类型。
在 name
属性中,声明接受的Intent
类别。该值必须是操作的文本字符串值,而不是类常量。
例如:
禁止其他应用通过Intent 掉起自己组件
android:exported="false"
应用主要入口点Action
<action android:name="android.intent.action.MAIN" />
Launcher 图标入口Action
以下两个元素必须配对使用,Activity
才会显示在应用启动器中。
注意:
CATEGORY_LAUNCHER
类别指示此 Activity
的图标应放入系统的应用启动器。 如果<activity>
元素未使用 icon
指定图标,则系统将使用<application>
元素中的图标
4. PendingIntent 使用方法
PendingIntent
对象是Intent
对象的包装器。PendingIntent
的主要目的是授权外部应用使用包含的 Intent
,就像是它从您应用本身的进程中执行的一样。
主要应用于以下场景
通知
NotificationManager
应用小部件
AppWidget
定时任务
AlarmManager
PendingIntent 使用注意事项:
- 1.PendingIntent.getActivity()
适用于启动 Activity
的 Intent
。
- 2.PendingIntent.getService()
适用于启动Service
的 Intent
。
- 3.PendingIntent.getBroadcast()
适用于启动 BroadcastReceiver
的Intent
。
5. Intent 7 大属性
- 1 . Component Name(目标组件的全类、组件名称)
setComponent(),
getComponent(),
setClass() ,
setClassName()
- 2 . Action (intent 将执行的动作)
setAction()
getAction()
- 3 . Data (用于向Action 属性提供操作数据)
URI
对象scheme://host:port/path
(协议头,主机,端口,路径)
- 4 . Type 分类
指定Data
所指定的Uri
对应的MIME
类型,不指定会根据数据自动推导
- 5 . Category 类别
为Action
提供额外的附件类别信息,可以有多个Category
,但必须有一个default
。
<!-- 默认分类必须加上,否则会报错 -->
<category android:name="android.intent.category.DEFAULT"/>
- 6 . Extra 数据载体
通过键值对进行数据存储,用于多个Action
之间提供数据交换.
- 7 . Flags 标记
标记组件如何启动,以及启动后如何对待FALG_ACTIVITY_SINGLE_TOP
FALG_ACTIVITY_CLEAR_TOP
等等)
6. 使用ADB调试 Intent
- 语法
adb shell am start -a <ACTION> -t <MIME_TYPE> -d <DATA> \
-e <EXTRA_NAME> <EXTRA_VALUE> -n <ACTIVITY>
- eg :
adb shell am start -a android.intent.action.DIAL \
-d tel:555-5555 -n org.example.MyApp/.MyActivity
7.Intent 常用方法使用总结
由于总结内容较多,已经另开文章讲述。
至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!