- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的应用程序运行的服务在设备重启或应用程序重新安装(更新)时终止。我添加了两个广播接收器来捕获这些事件 - 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 received和 Android 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/
背景 我最近在 merge 期间遇到了一个意外未 merge 的文档文件的问题。 无论出于何种原因,我搞砸了 merge 并有效地删除了文件(和其他几个文件),因为我忘记了它们的存在。 现在我想查看我
我在我的网站上使用旧的 mysql 版本和 php 版本 4。 我的表结构: | orders_status_history_id | orders_id | orders_status_id |
我是一名优秀的程序员,十分优秀!