标准广播
没有任何先后顺序 都会接收到这条广播 不能被截断
Intent intent=new Intent(“自定义广播”);
//发送一个标准广播
sendBroadcast(intent);
有序广播
有顺序 可以被截断
Intent intent=new Intent(“自定义广播”);
//发送一个有序广播
sendOrderedBroadcast(intent,null);
第二个参数为权限 写null就可以了
在接收广播的onReceiver()方法中可拦截广播
abortBroadcast();
本地广播
发出的广播只能在本程序中传递 广播接收器也只能接收本应用程序发出的广播
动态注册充电状态发生变化广播
public class MainActivity extends AppCompatActivity {
private MyReceiver myReceiver;
private IntentFilter intentFilter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建IntentFilter实例
intentFilter = new IntentFilter();
//充电状态发生变化的广播
intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
//注册广播
myReceiver = new MyReceiver();
registerReceiver(myReceiver, intentFilter);
}
/***
* 充电状态发生变化执行
*/
private class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//充电中
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_UNKNOWN);
//判断是否是充电状态
if (status == BatteryManager.BATTERY_STATUS_CHARGING) {
setCharging();
} else {
setNoBattery();
}
}
}
private void setNoBattery() {
Toast.makeText(MainActivity.this,"没有在充电",Toast.LENGTH_SHORT).show();
}
private void setCharging() {
Toast.makeText(MainActivity.this,"有在充电",Toast.LENGTH_SHORT).show();
}
/***
* 注销广播
*/
@Override
protected void onDestroy() {
if (myReceiver != null) {
unregisterReceiver(myReceiver);
}
super.onDestroy();
}
}
静态注册广播
New–Other–Broadcast Receiver新建广播
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"重启了",Toast.LENGTH_SHORT).show();
}
}
查看AndroidManifest.xml
这里是静态广播的注册
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<!--系统重启广播-->
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
重启需添加权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>