Android中可以使用Intent启动Activity,启动Service,发送broadcast等。
发送隐式意图,安卓系统会在各个应用的manifest文件中寻找intent-filter匹配的组件,然后执行意图的操作。如果有多个匹配的应用,例如启动浏览器时,用户装了多个浏览器,这时就会弹出对话框问用户启动哪一个浏览器。
Intent有如下几个属性:
显式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
章节中介绍。