关于自定义广播接收者的一个疑问
<!-- 静态注册广播接收器 --> <receiver android:name=".ImoocBroadcastReceiver"> <!-- 接收哪些广播 --> <intent-filter> <!-- 开机广播 --> <action android:name="android.intent.action.BOOT_COMPLETED"/> <!-- 电量低广播 --> <action android:name="android.intent.action.BATTERY_LOW"/> <!-- 应用被安装广播 --> <action android:name="android.intent.action.PACKAGE_INSTALL"/> <!-- 应用被卸载广播 --> <action android:name="android.intent.action.PACKAGE_REMOVED"/> <!--数据类型--> <data android:scheme="package" /> <!-- 自定义广播 --> <!--<action android:name="com.imooc.demo.afdsabfdaslj"/>--> </intent-filter> </receiver>
public class ImoocBroadcastReceiver extends BroadcastReceiver {
TextView mTextView;
public ImoocBroadcastReceiver() {
}
public ImoocBroadcastReceiver(TextView textView) {
mTextView = textView;
}
private static final String TAG = "ImoocBroadcastReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onReceive");
// 接收广播
if(intent != null){
// 接收到的是什么广播
String action = intent.getAction();
Log.d(TAG, "onReceive: " + action);
// 判断是什么广播(是不是我们自己发送的自定义广播)
if(TextUtils.equals(action, MainActivity.MY_ACTION)){
// 获取广播携带的内容, 可自定义的数据
String content = intent.getStringExtra(MainActivity.BROADCAST_CONTENT);
if(mTextView != null){
mTextView.setText("接收到的action是:"+ action + "\n接收到的内容是:\n" + content);
}
}
}
}
}老师,我运行这个应用程序后,卸载了一个之前已经存在的应用程序(不是系统应用),按理说,会调用onReceive方法,输出日志 "onReceive",但是没有,请问为什么会这样呢?
20
收起
正在回答
1回答
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.intent.action.PACKAGE_REMOVED");
intentFilter.addDataScheme("package");由于系统限制越来越严格,3-4小节也有说到,有些系统广播必须动态注册才行。应该是你版本问题,你改成以上方式动态注册方式应该就可以收到了。祝:学习愉快
2.Android 网络操作与流行框架
- 参与学习 人
- 提交作业 220 份
- 解答问题 1800 个
本阶段是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理;从文件存储、到轻量级数据库SQLite的使用;最后利用最流程的第三方框架助你快速开发企业级APP。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星