Android 四大组件之BroadcastReceiver
本文由 Luzhuo 编写,转发请保留该信息.
原文: http://blog.csdn.net/rozol/article/details/79606175
广播接收者
四大组件(Activity / BroadcastReceiver / Service / ContentProvider)之一
四大组件均运行于主线程
广播接收者
使用
-
编写广播接受者代码
public class AppStateReceiver extends BroadcastReceiver { private static final String TAG = AppStateReceiver.class.getSimpleName(); @Override public void onReceive(Context context, Intent intent) { // 获取当前接收广播的动作 String action = intent.getAction(); // 获取应用Uri Uri packageUri = intent.getData(); // package:包名 // 获取应用包名 String packageName = intent.getDataString(); if (action.equals("android.intent.action.PACKAGE_INSTALL") || action.equals("android.intent.action.PACKAGE_ADDED")){ Log.i(TAG, "应用: " + intent.getDataString() + " 被安装了"); } else if(action.equals("android.intent.action.PACKAGE_REMOVED")){ Log.i(TAG, "应用: " + intent.getDataString() + " 被卸载了"); } } }
-
配置监听广播事件
<receiver android:name=".AppStateReceiver"> <intent-filter> <action android:name="android.intent.action.PACKAGE_INSTALL"/> <action android:name="android.intent.action.PACKAGE_ADDED"/> <action android:name="android.intent.action.PACKAGE_REMOVED"/> <data android:scheme="package"/> </intent-filter> </receiver>
动态注册广播接收者
在清单文件里配置无效的广播接收者, 必须使用代码注册
-
动态注册广播接收者
private ScreenReceiver screenReceiver; /** * 动态注册特殊的广播 * @param view */ public void onclick2(View view){ screenReceiver = new ScreenReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction("android.intent.action.SCREEN_OFF"); filter.addAction("android.intent.action.SCREEN_ON"); // 动态注册广播接收者 registerReceiver(screenReceiver, filter); } @Override protected void onDestroy() { // 动态注销广播接收者 unregisterReceiver(screenReceiver); super.onDestroy(); }
-
ScreenReceiver 代码处理 (略)
发送广播
有序广播
-
发送广播
/** * 发送无序广播 */ public void onclick(View view){ Intent intent = new Intent(); intent.setAction("luzhuo.me"); intent.putExtra("content", "这是一条无序广播."); // 发送一条无序广播 // 只发送广播, 不管有没有接收, 且不可被 篡改 / 终止 sendBroadcast