Intent简介
Android中可以使用Intent启动Activity,启动Service,发送broadcast等。
- 显式意图 明确指定要启动的组件的类全名,在自己的应用中启动另一个Activity或Service经常使用这种做法。
- 隐式意图 通过意图调用其他应用经常使用隐式意图。
发送隐式意图,安卓系统会在各个应用的manifest文件中寻找intent-filter匹配的组件,然后执行意图的操作。如果有多个匹配的应用,例如启动浏览器时,用户装了多个浏览器,这时就会弹出对话框问用户启动哪一个浏览器。
Intent的使用
创建Intent
Intent有如下几个属性:
- Component name 显式意图需要制定意图的目标组件,如果没有指定此项,那么这个意图就是隐式的,系统会根据其他信息寻找意图的目标对象。
- Action 隐式意图使用此项指定意图的目标组件,但组件不是直接指定的,而是通过常量指定的。
- Data 指定数据的URL或MIME类型,如隐式启动浏览器时的http地址。
- Category 对于意图目标的额外分类信息。
- Extras 一些键值对数据,extras是直接将数据存放在这项里,区分于action。
- Flags 指导系统如何启动意图目标的一些额外信息。
显式Intent启动Service例子
Intent downloadIntent = new Intent(this, DownloadService.class);
downloadIntent.setData(Uri.parse(fileUrl));
startService(downloadIntent);
被intent启动的Activity或Service组件,有一个getIntent()
方法,可以获得启动本组件的Intent对象,这样我们就能得到放入Intent属性中的数据了。
隐式Intent携带电话号码启动打电话程序例子
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + number));
startActivity(intent);
接收隐式意图
intent-filter定义在应用的manifest中。
示例:
<activity android:name="ShareActivity">
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
只要action,category,data全部和intent-filter匹配,intent就能找到这个组件。intent-filter可以指定多个。
一个社交应用示例:
<activity android:name="MainActivity">
<!-- 程序入口点 -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="ShareActivity">
<!-- 这个Activity处理SEND意图,接收文本信息 -->
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
<!-- 这个Activity处理SEND意图,但是接收的是图片和视频 -->
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<action android:name="android.intent.action.SEND_MULTIPLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="application/vnd.google.panorama360+jpg"/>
<data android:mimeType="image/*"/>
<data android:mimeType="video/*"/>
</intent-filter>
</activity>
一些常用的隐式意图
我们不需要记很多关于隐式意图的配置,用到时直接看看文档就行了:
https://developer.android.google.cn/guide/components/intents-common.html
发送广播
Android中可以使用sendBroadcast()进行发布广播,广播会被BroadcastReciever接收或者没人接收。广播通常用于拦截系统的一些事件,如电量改变,发送短信等。有关广播的内容将在BroadcastReceiver
章节中介绍。
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。