移除或更新包时未调用 BroadcastReceiver

BroadcastReceiver not being called when package is removed or updates

我正在静态注册 BroadcastReceiver 并让它识别何时添加、删除或替换包,但 onReceive 未触发。这是我的清单,我在其中注册了它:

<receiver android:name="com.generic.package.UpdateReceiver" >
      <intent-filter>
          <action android:name="android.intent.action.PACKAGE_ADDED" />
          <action android:name="android.intent.action.PACKAGE_REPLACED" />
          <action android:name="android.intent.action.PACKAGE_REMOVED" />
          <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
        <data android:scheme="package" />
      </intent-filter>
  </receiver>

那么我的接收器的完整代码是这样的:

package com.generic.package;

import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;

public class UpdateReceiver extends BroadcastReceiver
  {
  @Override
  public void onReceive(Context context, Intent intent)
    {
    Log.e("TEST","WENT INTO ONRECEIVE");
    }
  }

起初我以为是因为我在 S5 上测试它而我没有 MY_PACKAGE_REPLACED,所以我添加了它并在旧版本上测试但它仍然没有调用。在 Logcat 中,我可以在接收者列表中看到这个接收者。我唯一能想到的是我正在使用 Maven 进行构建和安装——我需要做些什么特别的事情吗?我还尝试在清单中向接收器添加各种标签,例如 android:enabled="true" 和 android:exported="true",以及向 intent-filter 添加优先级和 none 他们工作了。

答案最终是这是一个 Maven 问题 - 当我将 APK 转移到我的 phone 并以这种方式安装时,一切都正常启动。经验教训:即使它说它是通过 Maven 的 "install",它也不会触发任何接收器!