关于自定义广播接收者的一个疑问

关于自定义广播接收者的一个疑问

<!-- 静态注册广播接收器 -->
<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",但是没有,请问为什么会这样呢?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.intent.action.PACKAGE_REMOVED");
intentFilter.addDataScheme("package");

由于系统限制越来越严格,3-4小节也有说到,有些系统广播必须动态注册才行。应该是你版本问题,你改成以上方式动态注册方式应该就可以收到了。祝:学习愉快

  • 我有明珠一颗 提问者 #1
    就是说,有些系统广播,必须在代码中注册,发出去后,receiver才会接收到。哪些版本才能收到呢?
    2019-07-13 09:09:40
  • 好帮手慕雪 回复 提问者 我有明珠一颗 #2
    6.0之后就开始慢慢的在变化了。6.0之前没有问题 。
    2019-07-14 12:42:40
  • 我有明珠一颗 提问者 回复 好帮手慕雪 #3
    这样啊,谢谢哈!
    2019-07-14 18:36:44
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.Android 网络操作与流行框架
  • 参与学习           人
  • 提交作业       220    份
  • 解答问题       1800    个

本阶段是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理;从文件存储、到轻量级数据库SQLite的使用;最后利用最流程的第三方框架助你快速开发企业级APP。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师