接收程序包安装和卸载事件

接收程序包安装和卸载事件

我正在尝试检测何时安装新的应用程序但仅在我的应用程序正在运行时。我设法通过制作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方法。任何帮助表示赞赏。


慕姐4208626
浏览 426回答 3
3回答

九州编程

我试图BroadcastReceiver在清单文件或java代码中注册。但是这两种方法都未能触发该onReceive()方法。在谷歌搜索这个问题之后,我在SO:Android Notification App中找到了来自另一个Thread的两种方法的解决方案在清单文件中(此方法自API 26(Android 8)以来不再适用,因此导致早期Android版本出现性能问题):<receiver&nbsp;android:name=".YourReceiver"> &nbsp;&nbsp;&nbsp;&nbsp;<intent-filter> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<action&nbsp;android:name="android.intent.action.PACKAGE_INSTALL"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<action&nbsp;android:name="android.intent.action.PACKAGE_ADDED"&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<data&nbsp;android:scheme="package"/> &nbsp;&nbsp;&nbsp;&nbsp;</intent-filter></receiver>在java代码中:IntentFilter&nbsp;intentFilter&nbsp;=&nbsp;new&nbsp;IntentFilter();intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);intentFilter.addAction(Intent.ACTION_PACKAGE_INSTALL);intentFilter.addDataScheme("package");registerReceiver(br,&nbsp;intentFilter);这应该适合你。

神不在的星期二

只是为了补充上面的Huang的答案,这里是如何获取新安装的应用程序的包名称:public&nbsp;class&nbsp;YourReceiver&nbsp;extends&nbsp;BroadcastReceiver&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onReceive(Context&nbsp;context,&nbsp;Intent&nbsp;intent)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;packageName&nbsp;=&nbsp;intent.getData().getEncodedSchemeSpecificPart(); &nbsp;&nbsp;&nbsp;&nbsp;}}

当年话下

其他答案指出了倾听ACTION_PACKAGE_ADDED和ACTION_PACKAGE_REPLACED广播。对于Android 7.1及更低版本来说这很好。在Android 8.0+上,您无法在清单中注册这些广播。相反,你需要调用getChangedPackages()的PackageManager周期性,如通过定期JobScheduler的工作。这不会为您提供实时结果,但实时结果不再是Android 8.0+的选项。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android