接收包安装和卸载事件

新手上路,请多包涵

我正在尝试检测何时安装新应用程序,但前提是我的应用程序正在运行。我设法通过制作 BroadcastReceiver 并在 AndroidManifest 文件中激活它来检测应用程序的安装,但这会检测到即使我的应用程序已关闭。所以这就是为什么我需要手动激活和停用 broadcastreveiver。为此,我有以下代码:

 br = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Log.i("Enter", "Enters here");
        Toast.makeText(context, "App Installed!!!!.", Toast.LENGTH_LONG).show();
    }
};
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
intentFilter.addAction(Intent.ACTION_PACKAGE_INSTALL);
registerReceiver(br, intentFilter);

这应该在安装新应用程序时祝酒。但遗憾的是它没有。它不进入 onReceive 方法。任何帮助表示赞赏。

原文由 Petre Popescu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

我试图在清单文件或 Java 代码中注册 BroadcastReceiver 。但是这两种方法都未能触发 onReceive() 方法。谷歌搜索这个问题后,我从 SO 中的另一个线程找到了这两种方法的解决方案: Android Notification App

在清单文件中( 此方法自 API 26 (Android 8) 起不再适用,它会导致早期 Android 版本出现性能问题):

 <receiver android:name=".YourReceiver">
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_INSTALL" />
        <action android:name="android.intent.action.PACKAGE_ADDED" />
        <data android:scheme="package"/>
    </intent-filter>
</receiver>

在java代码中:

 IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
intentFilter.addAction(Intent.ACTION_PACKAGE_INSTALL);
intentFilter.addDataScheme("package");
registerReceiver(br, intentFilter);

这应该适合你。

原文由 Huang 发布,翻译遵循 CC BY-SA 4.0 许可协议

其他答案指出监听 ACTION_PACKAGE_ADDEDACTION_PACKAGE_REPLACED 广播。这适用于 Android 7.1 及更低版本。在 Android 8.0+ 上,您无法在清单中注册这些广播。

相反,您需要在 getChangedPackages() PackageManager ,例如通过定期 JobScheduler 作业。这不会为您提供实时结果,但实时结果在 Android 8.0+ 上不再是一个选项。

原文由 CommonsWare 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题