参考《Professional Android 4 Development》
Local Broadcast Manager 简介
Local Broadcast Manager由Android Support Library引入,用于实现应用程序内部Broadcast的发送和处理。因为监听范围缩小了,所以Local Broadcast既比全局的Broadcast高效,又同时保护信息不被其他应用程序获取,提升了安全性。使用Local Broadcast Manager之前,首先要将Android Support Library引用到应用程序中。
PendingIntent简介
使用PendingIntent,其他应用程序可以在一段时间后代理此程序处理相应的Intent。
int requestCode = 0; int flags = 0; // Start an Activity Intent startActivityIntent = new Intent(this, MyOtherActivity.class); PendingIntent.getActivity(this, requestCode, startActivityIntent, flags); // Start a Service Intent startServiceIntent = new Intent(this, MyService.class); PendingIntent.getService(this, requestCode, startServiceIntent , flags); // Broadcast an Intent Intent broadcastIntent = new Intent(NEW_LIFEFORM_DETECTED); PendingIntent.getBroadcast(this, requestCode, broadcastIntent, flags);
使用Intent Filters
在Manifest文件中,将intent-filter标签添加到相应Activity或Service的Manifest Node中,即可创建一个Intent Filter,其中可以包括这些子标签:
- Action
- Category
- ALTERNATIVE
- SELECTED_ALTERNATIVE
- BROWSABLE
- DEFAULT
- HOME
- LAUNCHER
- Data
<activity android:name=”.MyBlogViewerActivity”> <intent-filter> <action android:name=”android.intent.action.VIEW” /> <category android:name=”android.intent.category.DEFAULT” /> <category android:name=”android.intent.category.BROWSABLE” /> <data android:scheme=”http” android:host=”blog.radioactiveyak.com”/> </intent-filter> </activity>
Intent Filter的运作机制
1. Android将所有应用的Intent Filter汇总到一个列表中。
2. 将与Action或Category不匹配的Intent Filter从列表中删除。
a) Action必须完全匹配
b) 只有包含所有的Category的Filter才会被匹配
3. Intent中data URI的每个部门都将与Intent Filter的data标签进行匹配,只有每个部分都对应才能被匹配。若Intent Filter中没有data tag,则可以匹配任意Intent中的Data。
4. 如果某个Intent最终被多个Intent Filter截获,则将由用户选择处理方式。
获取应用程序截获的Action及其数据
在Intent Filter截获Intent后,可以使用这种方式获取Action及数据:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent intent = getIntent(); String action = intent.getAction(); Uri data = intent.getData(); }