移除或更新包时未调用 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",它也不会触发任何接收器!
我正在静态注册 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",它也不会触发任何接收器!