jubincn

导航

Android 4 学习(13):Local Broadcast Manager & Intent Filter

参考《Professional Android 4 Development

 

Local Broadcast Manager 简介

Local Broadcast ManagerAndroid 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标签添加到相应ActivityService的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. 将与ActionCategory不匹配的Intent Filter从列表中删除。

  a) Action必须完全匹配

  b) 只有包含所有的CategoryFilter才会被匹配

3. Intentdata URI的每个部门都将与Intent Filterdata标签进行匹配,只有每个部分都对应才能被匹配。若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();
}

 

  

 

  

 

 

 

posted on 2013-11-29 00:08  jubincn  阅读(570)  评论(0)    收藏  举报