在 Android 里面有各种各样的广播,比如电池的使用状态,电话的接收和短信的接收,开机与关机等等都会产生一个广播,应用程序开发者也可以监听这些广播并做出程序逻辑的处理。
2.BroadCastReceiver的作用
例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度,等等。
3.BroadCastReceiver的注册方式(用电话拨号器举例:)
第一种方式(静态注册):
1)第一步
public class CallReceiver extends BroadcastReceiver {
//广播接收者接收到广播是,次方法调用
@Override
public void onReceive(Context arg0, Intent arg1) {
// System.out.println("打电话来来");
//获取打电话广播中携带的号码
String number = getResultData();
SharedPreferences sp = arg0.getSharedPreferences("number", arg0.MODE_PRIVATE);
String ipNumber = sp.getString("ipNumber", "");
//把新的号码放入广播中
setResultData(ipNumber + number);
}
}
2)第二步
系统注册:在 AndroidManifest.xml 中注册
<receiver android:name="cn.miwa.ipdial.CallReceiver">
<intent-filter >
<!-- 指定要用到系统的广播 -->
<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
</intent-filter>
</receiver>
<!-- 要用到的权限 -->
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
第二种方式(动态注册):
// 广播接收者 - 广播的接收
private BroadcastReceiver callReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// 相关处理,如收短信,监听电量变化信息
}
};
代码中注册:
IntentFilter intentFilter = new IntentFilter( "android.intent.action.NEW_OUTGOING_CALL " );
registerReceiver( callReceiver , intentFilter);