android 应用五大核心组件之四(BroadcastReceiver)
概述
Android中的广播要么来自于系统,要么来自普通应用程序。
很多事件都可能导致系统广播,如插拔USB,插拔耳机,手机所在时区发生变化,电池电量低,用户改变系统语言设置等。来自普通应用程序,如一个应用程序通知其他应用程序某些数据已 经下载完毕。为了响应不同的事件通知,应用程序可以注册不同的Broadcast Receiver。所有的Broadcast Receiver都继承自基类BroadcastReceiver。
BroadcastReceiver自身并不实现图形用户界面,但是当它收 到某个通知后,BroadcastReceiver可以启动Activity作为响应,或者通过NotificationMananger提醒用户。 BroadcastReceiver是对发送出来的Broadcast进行过滤接收并响应的一类组件。
注册
1.静态注册
在AndroidManifest.xml中注册此Receiver
<receiver android:name=".UsbReceiver" >
<intent-filter>
<action android:name="android.intent.action.MEDIA_MOUNTED" />
<data android:scheme="file" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MEDIA_UNMOUNTED" />
<data android:scheme="file" />
</intent-filter>
</receiver>
2.动态注册
public class MainActivity extends Activity { private static final String STATICACTION = "com.byread.static"; private static final String DYNAMICACTION = "com.byread.dynamic"; // USB设备连接 private static final String SYSTEMACTION = Intent.ACTION_POWER_CONNECTED; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } @Override protected void onStart() { super.onStart(); // 注册自定义动态广播消息 IntentFilter filter_dynamic = new IntentFilter(); filter_dynamic.addAction(DYNAMICACTION); registerReceiver(dynamicReceiver, filter_dynamic); // 注册系统动态广播消息 IntentFilter filter_system = new IntentFilter(); filter_system.addAction(SYSTEMACTION); registerReceiver(systemReceiver, filter_system); } private BroadcastReceiver dynamicReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.e("MainActivity", "接收自定义动态注册广播消息"); if(intent.getAction().equals(DYNAMICACTION)){ } } }; private BroadcastReceiver systemReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.e("MainActivity", "接收系统动态注册广播消息"); if(intent.getAction().equals(SYSTEMACTION)){ } } }; }
3.发送广播
1.把要发送的信息和用于过滤得信息(如Action、Category)装入一个Intent对象
2.调用Context.sendBroadcast()、sendOrderBroadcast()、sendStickyBroadcast()方法,广播该Intent对象
Intent intent = new Intent("action_custom.broastcast"); intent.putExtra("custom.broastcast_data", data); Context.sendBroadcast(intent);
4.接受广播
public class BootCompleteReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("action_custom_broastcast")) { } } }

浙公网安备 33010602011771号