建立一个广播接收器的步骤:android
1.建立一个类 extends BroadCastReceiver,重写onReceive()方法安全
2.注册广播网络
3.发送广播线程
context.sendBroadcast(new Intent("action")); // 广播的频道生命周期
注册广播的两种方式:get
1.全局广播:it
注册在清单配置文件,关闭应用后仍在监听io
<receiver android:name="全路径">ast
<intent-filter>test
<action android:name="xxx"/> // 能够为全路径的小写
</intent-filter>
</receiver>
2.动态注册
MainActivity ——> onCreate() {
IntentFilter filter = new IntentFilter();
filter.addAction(MY_ACTION);
receiver = new MyBroadCast();
registerReceiver(receiver, filter);
}
onDestroy(){ unregisterReceiver(receiver); }
系统广播:
Intent.ACTION_BATTERY_LOW 低电量提醒广播
Intent.ACTION_BATTERY_CHANGED
Intent.ACTION_BOOT_COMPLETED 开机完成
Intent.ACTION_SHUTDOWN 关机提醒
Intent.ACTION_SCREEN_OFF 屏幕关闭
Intent.ACTION_SCREEN_ON
Intent.ACTION_USER_PRESENT 屏幕解锁
Intent.ACTION_NEW_OUTGOING_CALL 拨号广播
TelephoneManager.ACTION_PHONE_STATE_CHANGED 来电时电话状态改变(如响铃、空置、挂断)
Telephone.Sms.Intent_SMS_RECEIVED_ACTION 接收短信
ConnectivityManager.CONNECTIVITY_ACTION 网络状态改变
example:
ConnectivityManager.CONNECTIVITY_ACTION 网络状态改变
onReceive(Context context, Intent intent) {
ConnectivityManager manager = (ConnectivityManager)context.getSystenService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
if(networkInfo != null && networkInfo.isAvailable() && networkInfo.isConnectedOrConnecting()) {
String name = networkInfo.getTypeName();
}else {
context.Toast.makeText(context, "没有网络",Toast.LENTH_LONG).show();
}
}
广播的生命周期短暂:接收到广播时建立,onReceive()方法结束时销毁,不要在广播接收者中作一些耗时或建立子线程耗时操做,应在服务Service中完成
有序广播(action同样)
context.sendOrderedBroadcast(intent, 权限str);
1.按照注册顺序
2.按大小 <intent-filter android:property="100"> // 1000最高,-1000最低
3.中断低的广播接收器接收广播
onReceiver() {
...
abortBroadcast();
}
广播的安全性:
发送端:
1.指定接收广播的应用包名:
intent.putPackage("com.fgl.test");
2.发送带权限的广播:
定义权限:<permisson android:name = "com.fgl.testsafetypermission"/>
<use-permission android:name = "com.fgl.testsafetypermission"/>
sendBroadcast(intent, "com.fgl.testsafetypermission");
接收端:不接收外部应用的广播 <receiver ... android:exported="false">