关于自定义广播接收者的一个疑问
<!-- 静态注册广播接收器 --> <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 星