1.动态广播(动态注册),
电池电量,USB是否插入,可以取消广播(减少资源),
要添加对应的权限,获取电量,就要电量相关的权限
2.静态广播
1.开关机
开机就会执行,不用启动应用,缺点是,一开机就会启动,浪费资源
静态广播来监察开关机:
步骤:设置权限–>声明广播–>广播接收
2.应用安装卸载
声明广播
<!-- 监听应用卸载安装 -->
<receiver android:name=".AppStateChangeReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<action android:name="android.intent.action.PACKAGE_ADDED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
编写广播信息
public class AppStateChangeReceiver extends BroadcastReceiver {
private static final String TAG = "AppStateChangeReceiver";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_PACKAGE_ADDED)) {
Log.d(TAG, "onReceive: 应用安装了,它的信息是"+intent.getData());
}else if (action.equals(Intent.ACTION_PACKAGE_REMOVED)){
Log.d(TAG, "onReceive: 应用卸载了"+intent.getData());
}
}
}
3.自定义广播
发送自定义广播
com.example.broadcastreceiver.SEND_MSG是自定义的,要与声明的那里保存一致
//我们去发送广播
Intent intent=new Intent();
intent.setAction("com.example.broadcastreceiver.SEND_MSG");//设置动作,类似一个标记,这里是自定义的
intent.putExtra(Constants.KEY_CONTENT,"sunweihao");
//发送广播
sendBroadcast(intent);
接收广播执行逻辑
public class MessageReceiver extends BroadcastReceiver {
private static final String TAG = "MessageReceiver";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.d(TAG, "onReceive: action is -->"+action);
Log.d(TAG, "onReceive: content is -->"+intent.getStringExtra(Constants.KEY_CONTENT));
}
}
声明广播
<receiver android:name=".MessageReceiver">
<intent-filter>
<action android:name="com.example.broadcastreceiver.SEND_MSG" />
</intent-filter>
</receiver>
有序广播
1.关键概念
- 优先级(-1000~1000):越大越先执行
- 可中断:中断后,后面的就不会接收到
- 可修改:修改后,后面的内容将发送改变
2.步骤:
创建三个广博:其中android:priority="0"表示设置优先级为0
<!-- 有序广播 -->
<receiver android:name=".HighLevelReceiver">
<intent-filter android:priority="1000">
<action android:name="com.sunfbeaches.broadcastdemoforcourse.OREDR_BROADCAST" />
</intent-filter>
</receiver>
<receiver android:name=".DefaultLevelReceiver">
<intent-filter android:priority="0">
<action android:name="com.sunfbeaches.broadcastdemoforcourse.OREDR_BROADCAST" />
</intent-filter>
</receiver>
<receiver android:name=".LowLevelReceiver">
<intent-filter android:priority="-1000">
<action android:name="com.sunfbeaches.broadcastdemoforcourse.OREDR_BROADCAST" />
</intent-filter>
</receiver>
编写接收逻辑代码:
/**
* author:sunweihao
* 创建时间:2021/3/29 15:28
* Describe:
*/
public class HighLevelReceiver extends BroadcastReceiver {
private static final String TAG = "HighLevelReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onReceive: HighLevelReceiver");
// abortBroadcast();//终止广播
//打印原来的广播内容
Bundle resultExtras=getResultExtras(true);
String content = resultExtras.getCharSequence("content").toString();
Log.d(TAG, "onReceive: content-->"+content);
//修改广播内容
resultExtras.putCharSequence("content","我是修改过的广播内容");
setResultExtras(resultExtras);
}
}
/**
* author:sunweihao
* 创建时间:2021/3/29 15:30
* Describe:
*/
public class DefaultLevelReceiver extends BroadcastReceiver {
private static final String TAG = "DefaultLevelReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onReceive: DefaultLevelReceiver");
Bundle resultExtras=getResultExtras(true);
String content = resultExtras.getCharSequence("content").toString();
Log.d(TAG, "onReceive: content-->"+content);
}
}
/**
* author:sunweihao
* 创建时间:2021/3/29 15:30
* Describe:
*/
public class DefaultLevelReceiver extends BroadcastReceiver {
private static final String TAG = "DefaultLevelReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onReceive: DefaultLevelReceiver");
Bundle resultExtras=getResultExtras(true);
String content = resultExtras.getCharSequence("content").toString();
Log.d(TAG, "onReceive: content-->"+content);
}
}
发送有序广播
Intent intent = new Intent();
intent.setAction(Constants.ACTION_ORDER_BROADCAST_TEST);
Bundle bundle=new Bundle();
bundle.putCharSequence("content","我是被发送的广播内容...");
sendOrderedBroadcast(intent, null,null,null, Activity.RESULT_OK,null,bundle);