PACKAGE_ADDED BroadcastReceiver不起作用

我有一个在Manifest中注册的广播接收器:

       

接收者:

 public class NewAppReceiver extends BroadcastReceiver { private static final String TAG = "NewAppReceiver"; @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, "Intent: " + intent.getAction()); } } 

当我手动或从Android Market安装APK时,没有收到任何信息。 为什么?

在安装其他应用程序之前,您是否运行了包含此broadcastReceiver的应用程序?

从某个API版本开始,在您执行应用程序之前,broadcastReceivers将无法运行。 放置一个活动并执行它。

另外,不要忘记将以下内容添加到broadcastReceiver中:

  

编辑:在Android 8及更高版本中,如果您的应用针对的是API 27或更高版本,它将部分工作,因此您必须在代码中而不是在清单中注册这些事件。 以下是清单中仍可安全使用的意图列表: https : //developer.android.com/guide/components/broadcast-exceptions.html 。

其余的应该在代码中使用。 更多信息在这里

由于android.intent.action.PACKAGE_ADDED是系统意图(注意您自己的应用程序在安装时不会收到它),因此您的BroadcastReceiver将从应用程序外部的来源接收消息。 因此,检查你没有把: android:exported =“false”

您还可能需要添加:

  

因此, AndroidManifest.xml中的BroadcastReceiver应如下所示:

         

如果它仍然不起作用,您可以尝试放置更高的优先级,例如: android:priority =“1000”

请查看: http : //developer.android.com/guide/topics/manifest/receiver-element.html

您是否尝试在正在安装的应用程序中接收意图? ACTION_PACKAGE_ADDED的文档说:

请注意,新安装的软件包不会收到此广播。

另一种可能性是,这种意图可能不会传递给通过清单注册的组件,而只能手动传递(如Mark Murphy对Stack Overflow问题的回答中所述, 无法接收PACKAGE意图的广播 )。

如果你试图收到一些其他包,它必须工作。

(正如@Savvas所说)如果你试图收到自己的包裹,你就无法收到它。 即使你的广播接收器有action.PACKAGE_ADDED , 也不会触发接收器的onReceive方法。

在这种情况下,最好的办法就是保存这些数据。 通过使用sharedPreferences ,添加类似“appIsWorkedBefore”的键,并在启动器Activity的onCreate方法上将此variables设置为“true”。 你可以根据这个布尔值进行工作。