gpt4 book ai didi

android - 未收到 ACTION_MY_PACKAGE_REPLACED

转载 作者:IT老高 更新时间:2023-10-28 22:05:47 33 4
gpt4 key购买 nike

我正在使用 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/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com