赞
踩
广播分为发送者和接受者,可以理解为发送者发送通知,接受者可以选择接收通知
广播分为系统广播和本地广播,系统广播可以分为标准和有序
标准广播:一但发出所有接收者同时受到
有序广播:接收者按优先级受到而且可以截断
本地广播:以上都是系统全局广播,发出的广播可以被其他任何应用接收这样容易产生安全问题,所以有了本地广播只能在应用程序内部传递。
分为动态和静态注册
静态注册:
静态注册的广播在应用安装时由系统自动注册完成,必须在AndroidManifest.xml中声明,单独一个类不能像动态一样可以在某个类里面,否则抛异常。可以监听手机的开关机。静态注册是当程序关闭后,如果有广播发过来,还能启动程序。只要设备开启状态广播就能接受。
动态注册:比静态优先级高,不需要在AndroidManifest.xml中声明,但是周期短随着context的终止而终止。
Intent intent = new Intent("aaaaaa");
intent.putExtra("key111", "value111"); //可以携带参数去参数时
sendBroadcast(intent) ; //广播也是使用intent发送的
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.e("测试测试测试", "onReceive: 收到广播aaaaa");
//如果多条广播可以使用下面方法判断收到哪一条
String action = intent.getAction();
if("android.intent.action.SIM_STATE_CHANGED".equals(action)){
//接收广播消息
String bValue= intent.getStringExtra("key111");//bValue值就是:value111
Log.e(TAG,"SIM卡有变动");
}
}
}
MyBroadcastReceiver screen=new ScreenBroadcastReceiver ();//实例化一下广播接收器
IntentFilter filter = new IntentFilter();//添加一个过滤器只接受“aaaaaaa”广播
filter.addAction("aaaaaa");
registerReceiver(screen, filter);
最后别忘了销毁广播
unregisterReceiver(screen);
标准广播(静态注册):不一样的一点就是把过滤器写到AndroidManifest.xml文件中
Intent intent = new Intent("aaaaaa");
sendBroadcast(intent) ; //广播也是使用intent发送的
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.e("测试测试测试", "onReceive: 收到广播aaaaaa");
}
}
在AndroidManifest.xml中注册,让MyBroadcastReceiver 接收一条aaaaaa广播
<receiver android:name=".MyBroadcastReceiver">
android:enabled="true"
android:exported="true"
<intent-filter>
<action android:name="aaaaaa"/>
</intent-filter>
</receiver>
和标准广播不一样的就是接收器的接收有先后顺序,且前面可以将广播截断
Intent intent = new Intent(“aaaaaa”);
sendOrderedBroadcast(intent,null) ; //第二哥参数是和权限有关的直接null
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.e("测试测试测试", "onReceive: 收到广播aaaaaa");
abortBroadcast();//表示截断广播
}
}
在AndroidManifest.xml中注册,让MyBroadcastReceiver 接收一条aaaaaa广播,不一样的就孙有优先级
<receiver android:name=".MyBroadcastReceiver">
android:enabled="true"
android:exported="true"
<intent-filter android:priority="100"> //优先级越高越先接收到
<action android:name="aaaaaa"/>
</intent-filter>
</receiver>
以上广播都是全局的被其他应用也能接收,很不安全,本地广播只能在本app内应用。
本地广播需要获取示列;
LocalBroadcastManager localBroadcastManager=LocalBroadcastManager.getInstance(mContext);//获取广播实列 Intent intent = new Intent("aaaaaa"); localBroadcastManager.sendBroadcast(intent) ;//发送广播 public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.e("测试测试测试", "onReceive: 收到广播aaaaa"); } } MyBroadcastReceiver screen=new ScreenBroadcastReceiver ();//实例化一下广播接收器 IntentFilter filter = new IntentFilter();//添加一个过滤器只接受“aaaaaaa”广播 filter.addAction("aaaaaa"); localBroadcastManager.registerReceiver(screen, filter);
这些广播是手机系统发送的我们只需要接收就行
监听网络变化 android.net.conn.CONNECTIVITY_CHANGE
关闭或打开飞行模式 Intent.ACTION_AIRPLANE_MODE_CHANGED
充电时或电量发生变化 Intent.ACTION_BATTERY_CHANGED
电池电量低 Intent.ACTION_BATTERY_LOW
电池电量充足(即从电量低变化到饱满时会发出广播) Intent.ACTION_BATTERY_OKAY
系统启动完成后(仅广播一次) Intent.ACTION_BOOT_COMPLETED
按下照相时的拍照按键(硬件按键)时 Intent.ACTION_CAMERA_BUTTON
屏幕锁屏 Intent.ACTION_CLOSE_SYSTEM_DIALOGS
插入耳机时 Intent.ACTION_HEADSET_PLUG
未正确移除SD卡但已取出来时(正确移除方法:设置-SD卡和设备内存-卸载SD卡) Intent.ACTION_MEDIA_BAD_REMOVAL
成功安装apk Intent.ACTION_PACKAGE_ADDED
成功删除apk Intent.ACTION_PACKAGE_REMOVED
重启设备 Intnet.ACTION_REBOOT
屏幕被关闭 Intent.ACTION_SCREEN_OFF
屏幕被打开 Intent.ACTION_SCREEN_ON
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。