public class NetworkReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //TODO } }
<receiver android:name="MyBroadcastReceiver"> <intent-filter android:priority="1000"> <action android:name=“" /> </intent-filter> </receiver>
public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler)此种方式注册的广播接收者可以卸载:
public void unregisterReceiver(BroadcastReceiver receiver)
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />监听短信到来,需加上权限:
< uses-permission android:name = "android.permission.RECEIVE_SMS" />
public void sendBroadcast(Intent intent) public void sendStickyBroadcast(Intent intent) public void sendOrderedBroadcast(Intent intent, String receiverPermission) public void sendStickyOrderedBroadcast( Intent intent, BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String initialData, Bundle initialExtras)
package cn.edu.chd.broadcastreceiverdemo.receiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class SmsReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "短信来了啊...",1).show(); } }清单文件:
<receiver android:name="cn.edu.chd.broadcastreceiverdemo.receiver.SmsReceiver" > <intent-filter > <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver>权限:
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.BROADCAST_STICKY"/>
也可以通过Context的removeStickyBroadcast(Intent intent)接口移除缓存的粘性广播。
BroadcastReceiver的设计初衷就是从全局考虑的,可以方便应用程序和系统、应用程序之间、应用程序内的通信,所以对单个应用程序而言BroadcastReceiver是存在安全性问题的,相应问题及解决如下:
1.当应用程序发送某个广播时系统会将发送的Intent与系统中所有注册的BroadcastReceiver的IntentFilter进行匹配,若匹配成功则执行相应的onReceive函数。可以通过类似sendBroadcast(Intent, String)的接口在发送广播时指定接收者必须具备的permission。或通过Intent.setPackage设置广播仅对某个程序有效。
2. 当应用程序注册了某个广播时,即便设置了IntentFilter还是会接收到来自其他应用程序的广播进行匹配判断。对于动态注册的广播可以通过类似registerReceiver(BroadcastReceiver, IntentFilter, String, android.os.Handler)的接口指定发送者必须具备的permission,对于静态注册的广播可以通过android:exported="false"属性表示接收者对外部应用程序不可用,即不接受来自外部的广播。
3.使用LocalBroadcastManager,这个类在support包中。使用方式如下:
注册广播:LocalBroadcastManager.getInstance(context).registerReceiver 解除注册:LocalBroadcastManager.getInstance(context).unregisterReceiver 发送广播:LocalBroadcastManager.getInstance(context).sendBroadcast(intent)
原文:http://blog.csdn.net/chdjj/article/details/19256521