Android:从未收到广播 ACTION_MY_PACKAGE_REPLACED

标签 android android-studio broadcastreceiver android-broadcast

我的应用程序运行的服务在设备重启或应用程序重新安装(更新)时终止。我添加了两个广播接收器来捕获这些事件 - BOOT_COMPLETED 和 ACTION_MY_PACKAGE_REPLACED。

ACTION_MY_PACKAGE_REPLACED 接收器似乎不起作用。这是我拥有的:

AndroidManifest.xml:

    <receiver android:name=".RebootReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
    </receiver>
    <receiver android:name=".ReInstallReceiver">
        <intent-filter>
            <action android:name="android.intent.action.ACTION_MY_PACKAGE_REPLACED"/>
        </intent-filter>
    </receiver>

重启接收器:

public class RebootReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Logg.d("Reboot completed. Restarting service");
        context.startService(new Intent(context, MyService.class));
    }
}

重新安装接收器:

public class ReInstallReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Logg.d("App Upgraded or Reinstalled. Restarting service");
        context.startService(new Intent(context, MyService.class));
    }
}

运行 minSdk=16;在运行 KitKat 的 Galaxy S3 上进行测试。通过检查我的服务是否在“设置/应用程序”中运行来测试成功,它会在重新启动时执行,但不会重新安装。

我已经考虑了以下注释,其中指出在 Android Studio 1.0+ 中, list 合并意味着我无法将两个接收器合并到一个类中。参见 ACTION_MY_PACKAGE_REPLACED not receivedAndroid manifest merger fails for receivers with same name but different content

最佳答案

您可能已经想到了这一点,但是您在 list 中的操作名称是错误的,而不是:

android.intent.action.ACTION_MY_PACKAGE_REPLACED

应该是

android.intent.action.MY_PACKAGE_REPLACED

您也可以使用 adb shell 手动触发接收器以进行测试:

adb shell am broadcast -a android.intent.action.MY_PACKAGE_REPLACED -n com.example.myapp/.ReInstallReceiver

关于Android:从未收到广播 ACTION_MY_PACKAGE_REPLACED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28403226/

相关文章:

android - 如何使用 fragment 而不是使用 Activity 来启动 Smartlock 保存

java - 条件依赖

java - 应用程序被终止时,AlertDialog 不会出现在屏幕上

java - android - 向 MainActivity 发送广播,然后显示 TextView

Android服务在应用程序处于后台时接收短信

java - Drawable不会在SurfaceView上绘制,Thread实现,不重写onDraw

android - 设置抽屉导航的背景颜色

android - 如何知道我的手机使用的互联网连接类型

java - 'android-24' 需要 JDK 1.8 或更高版本才能编译

android - 我的可绘制目录中有许多图像文件。不好吗?