-
Android系统常见的广播.
-
外拨电话(ip拨号器)
拦截动作: android.intent.action.NEW_OUTGOING_CALL 需要权限: android.permission.PROCESS_OUTGOING_CALLS 清单文件中配置: <receiver android:name="com.ycy.commonBroadcastReceiver.receiver.IpCallerReceiver" > <intent-filter> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> </intent-filter> </receiver> 代码中,广播接收者类继承BroadcastReceiver,并重写onReceive方法: public class IpCallerReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String resultData = getResultData(); setResultData(ipNum + resultData); } }
-
sd卡卸载
拦截动作: android.intent.action.MEDIA_UNMOUNTED 指定scheme: file
-
开机自动启动, 权限: 3.0以上版本必须加权限, 以下的版本可以不加, 注意: 3.0以上的版本如果用户没有启动过程序, 是接收不到广播的.
拦截动作: android.intent.action.BOOT_COMPLETED 需要权限: android.permission.RECEIVE_BOOT_COMPLETED
-
接收短信的广播(短信拦截器) 拦截动作:android.provider.Telephony.SMSRECEIVED 需要权限:android.permission.RECEIVESMS
// 取出短信的内容 Bundle bundle = intent.getExtras(); // 获得系统接收到的短信 Object[] objectArray = (Object[]) bundle.get("pdus"); for (Object sms : objectArray) { byte[] smsBytes = (byte[]) sms; // 把byte数组转换成一个短信的对象 SmsMessage smsMessage = SmsMessage.createFromPdu(smsBytes); // 取出号码 String address = smsMessage.getOriginatingAddress(); // 取出内容 String body = smsMessage.getMessageBody(); String text = "address: " + address + ", body: " + body; System.out.println(text); if("1386767".equals(address)) { // 把短信内容转发到自己的手机上. SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage( "5556", // 对方的号码 null, // 短信中心的号码 text, // 短信内容 null, // 发送成功的回执 null); // 接收成功的回执 // 终止广播 abortBroadcast(); } }
-
安装和卸载广播
拦截动作: android.intent.action.PACKAGE_ADDED android.intent.action.PACKAGE_REMOVED 指定scheme: package
-
-
注册广播接收者
- 定义类继承BroadcastReceiver
- 在清单文件声明, 接收的广播.
- 实现onReceive
-
发送自定义广播.
-
无序广播: 不可以被拦截
- 如果拦截会报以下错误 BroadcastReceiver trying to return result during a non-ordered broadcast
-
有序广播: 优先级高的会拦截优先级低的.
- 优先级的取值范围是: 1000(高) ~ -1000(低)
- 相同优先级下, 先声明的比后声明的先收到. Intent intent = new Intent("com.ycy.songwennuan"); sendOrderedBroadcast( intent, null, new LeiFengReceiver(), // 无论是否拦截这个有序广播, 最终此参数指定的广播接受者必须收到. null, 0, "10000块钱", null);
-
-
java代码注册广播接受者:
-
特点: 优先级为0,并且要比清单文件为0的优先级的要高, 当前的广播接受者的生命周期的期限和activity是相关联的.
-
注册
IntentFilter filter = new IntentFilter(); filter.addAction("com.ycy.help"); leiFengReceiver = new LeiFengReceiver(); // java代码注册广播接受者, // 特点: 优先级要比清单文件为0的要高(因为他的优先级是0), // 当前的广播接受者的生命周期的期限和activity是相关联的. registerReceiver(leiFengReceiver, filter);
-
解注
unregisterReceiver(leiFengReceiver);
-