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)){
                
            }
        }
    };
}
View Code

 

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")) {
            
        }
    }
}

 

 

posted @ 2013-12-10 18:27  北青新伟  阅读(236)  评论(0)    收藏  举报