- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在使用 ACTION_MY_PACKAGE_REPLACED 来接收我的应用程序更新或重新安装的时间。我的问题是该事件从未被触发(我尝试了 Eclipse 和真实设备)。我就是这样做的:
list :
<receiver android:name=".MyEventReceiver" >
<intent-filter android:priority="1000" >
<action android:name="android.intent.action.ACTION_MY_PACKAGE_REPLACED" />
</intent-filter>
</receiver>
代码:
public class MyEventReceiver extends BroadcastReceiver
{
@Override public void onReceive(Context context, Intent intent)
{
if ("android.intent.action.ACTION_MY_PACKAGE_REPLACED".equals(intent.getAction()))
{ //Restart services
}
}
}
这段代码很简单,实际上我使用了其他事件,例如 BOOT_COMPLETED 和其他事件,它们可以工作,但 ACTION_MY_PACKAGE_REPLACED。谢谢。
最佳答案
出于某种原因,一位谷歌开发人员(名为“Dianne Hackborn”)认为可以单独注册到当前应用程序的 PACKAGE_REPLACED Intent(阅读存档版本 here ,原始链接 here )。
但是,我找不到任何正确的方法,所以我做出了妥协:它将在可用时使用最新的 API。
遗憾的是,我不知道为什么它不能被调试,但它确实有效(如果你愿意,你可以写入日志)。
代码如下:
list :
<receiver
android:name=".OnUpgradeBroadcastReceiver"
android:enabled="@bool/is_at_most_api_11" >
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
<receiver
android:name=".OnUpgradeBroadcastReceiver"
android:enabled="@bool/is_at_least_api_12" >
<intent-filter>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
</intent-filter>
</receiver>
res/values/version_checks.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="is_at_least_api_12" type="bool">false</item>
<item name="is_at_most_api_11" type="bool">true</item>
</resources>
res/values-v12/version_checks.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="is_at_least_api_12" type="bool">true</item>
<item name="is_at_most_api_11" type="bool">false</item>
</resources>
OnUpgradeBroadcastReceiver.java
public class OnUpgradeBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
if (VERSION.SDK_INT <= VERSION_CODES.HONEYCOMB
&& !context.getPackageName().equals(intent.getData().getSchemeSpecificPart())) {
android.util.Log.d("AppLog", "other apps were upgraded");
return;
}
android.util.Log.d("AppLog", "current app was upgraded");
编辑:在今天的 Android 版本中,当你应该将 minSdk 设置为至少 14 时,你不需要这个,实际上你应该只使用 MY_PACKAGE_REPLACED 就可以了。不需要 bool 值等...
关于android - 未收到 ACTION_MY_PACKAGE_REPLACED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12666734/
我的应用程序运行的服务在设备重启或应用程序重新安装(更新)时终止。我添加了两个广播接收器来捕获这些事件 - BOOT_COMPLETED 和 ACTION_MY_PACKAGE_REPLACED。 A
我正在使用 ACTION_MY_PACKAGE_REPLACED 来接收我的应用程序更新或重新安装的时间。我的问题是该事件从未被触发(我尝试了 Eclipse 和真实设备)。我就是这样做的: list
我是一名优秀的程序员,十分优秀!