微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

意图ACTION_PACKAGE_REMOVED被调用,而ACTION_PACKAGE_ADDED不被调用

如何解决意图ACTION_PACKAGE_REMOVED被调用,而ACTION_PACKAGE_ADDED不被调用

添加删除应用程序时,我正在尝试执行一些代码。我注册了广播接收器,并定义了一个意图过滤器,如下所示:

    mMyReceiver = new MyReceiver();
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
    intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
    intentFilter.addDataScheme("package");
    intentFilter.setPriority(999);
    registerReceiver(mMyReceiver,intentFilter);

https://developer.android.com/guide/components/broadcast-exceptions.html中所述,我什至可以在我的AndroidManifest中注册ACTION_PACKAGE_FULLY_REMOVED。好吧,当我卸载应用程序ACTION_PACKAGE_REMOVED以及在清单文件注册的ACTION_PACKAGE_FULLY_REMOVED时,就会调用它。但是,当我安装应用程序时,未调用ACTION_PACKAGE_ADDED。我找不到原因。其他所有与包相关的操作都相同。我唯一可以使用的是与卸载有关的软件。我真的希望其他人对如何解决它有所怀疑。非常感谢!

添加:在另一台设备上,甚至没有调用PACKAGE_REMOVED和PACKAGE_FULLY_REMOVED意图。但是,每20个安装中就有1个触发了ACTION_PACKAGE_ADDED意图。绝对奇怪的行为。是的,用于注册接收者的活动始终在运行,因此广播不会在任何时候取消注册。是不是有某种原因导致这些意图并非总是被人们所唤起,我的意思是像二十次中的一个一样?

加法2:将我的手放在第三台设备上。似乎所有运行android 11的设备(第一台和第三台设备)运行ACTION_PACKAGE_REMOVED和ACTION_PACKAGE_FULLY_REMOVED都没有问题。但是他们从不运行ACTION_PACKAGE_ADDED。但是,第二台设备运行Android10。它从不调用任何REMOVED操作,但会调用20次中的ADDED操作。我不确定100%API版本是否会导致这些不同的行为,但是事情变得越来越棘手。我对任何评论感到高兴!

添加3:越来越疯狂了。另一个Android 10设备运行良好,可以接收所有与PACKAGE相关的强度。这种不一致的行为怎么可能呢?

解决方法

这对我有用。

    var packageAddedReceiver = PackageAddedReceiver()

    val filter = IntentFilter()

    filter.addAction(Intent.ACTION_PACKAGE_ADDED)
    filter.addAction(Intent.ACTION_PACKAGE_REMOVED)
    filter.addAction(Intent.ACTION_PACKAGE_REPLACED)
    filter.addDataScheme("package")
    requireContext().registerReceiver(packageAddedReceiver,filter)

并在清单中

<receiver
        android:name=".receiver.PackageAddedReceiver"
        android:enabled="true"
        android:exported="false">
        <intent-filter android:priority="100">
            <action android:name="android.intent.action.PACKAGE_INSTALL" />
            <action android:name="android.intent.action.PACKAGE_ADDED" />
            <action android:name="android.intent.action.PACKAGE_REMOVED" />
            <data android:scheme="package" />
        </intent-filter>
    </receiver>

我犯的错误是使用 requireContext().registerReceiver(packageAddedReceiver,filter) 注册接收器

LocalBroadcastManager.getInstance(requireActivity())

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。