启动BroadcastReceiver需要两个步骤:
- 1. 创建需要启动的BroadcastReceiver的Intent
- 2. 调用Context的sendBroadcast()或sendorderedBroadcast()方法启动指定的BroadcastReceiver
为BroadcastReceiver注册广播地址,静态注册(intentFilter),动态注册(registerReceiver)
静态注册:
<receiver android:name=".MyReceiver"> <intent-filter> <action android:name="android.intent.action.MY_BROADCAST"/> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver>
动态注册:
MyReceiver receiver = new MyReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction("android.intent.action.MY_BROADCAST"); registerReceiver(receiver, filter);
还需要解除注册:unregisterReceiver()
普通广播对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。
终止广播:abortBroadcast()
http://blog.csdn.net/liuhe688/article/details/6955668
sendOrderedBroadcast(intent, string) 发送有序广播:
注意,使用sendOrderedBroadcast方法发送有序广播时,需要一个权限参数,如果为null则表示不要求接收者声明指定的权限,如果不为null,则表示接收者若要接收此广播,需声明指定权限。
接收系统Broadcaset,比如开机完成“android.intent.action.BOOT_COMPLETED”,“android.permission.ACCESS_NETWORK_STATE”,广播;然后构建启动服务Intent, new Intent(context, service.class); context.startService(intent); 启动Service.
ContentResolver对指定Uri执行CRUD等数据操作,但Uri并不是真正的数据核心,因此这些CRUD操作会委托给该Uri对应的ContentProvider来实现。
在AndroidManifest.xml中配置了provider之后,在Activity里getContentResolver()获取到resolver,再通过resolve调用query, insert, update等方法的时候,其实就是调用到了Provider执行数据操作。