gpt4 book ai didi

安卓 : restart application after update - ACTION_PACKAGE_REPLACED

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

我的应用程序不在 Play 商店中,请在网络上验证是否有新版本并下载并启动它。安装后我想重新启动应用程序,并使用 BroadcastRecevierACTION_PACKAGE_REPLACED。这是代码:

广播:

public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED)){
ApplicationInfo app = new ApplicationInfo();
if(app.packageName.equals("it.android.downloadapk")){
Intent LaunchIntent = context.getPackageManager().getLaunchIntentForPackage(app.packageName);
context.startActivity(LaunchIntent);
}
}
}

list :

<receiver android:name="it.android.downloadapk.Broadcast">
<intent-filter>
<action android:name="android.intent.action.ACTION_PACKAGE_REPLACED"></action>
<data android:scheme="package" android:path="it.android.downloadapk" />
</intent-filter>
</receiver>

问题是当我安装新的apk时,Broadcast似乎无法启动,为什么?

最佳答案

看到这个:

How to know my Android application has been upgraded in order to reset an alarm?

正确的解决方法是您在 list 中使用了错误的字符串: http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_REPLACED

应该改为“android.intent.action.PACKAGE_REPLACED”。


好的,我看到我写的内容仍然不足以尝试,所以我将破例发布整个项目,以证明它有效:应用程序代码位于名为 "com.broadcast_receiver_test"的包中。不要忘记在测试之前运行它,否则它将无法在某些 android 版本上运行(我认为 API 11+)。

list :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.broadcast_receiver_test" android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="3" />

<application android:icon="@drawable/ic_launcher"
android:label="@string/app_name">

<activity android:name=".BroadcastReceiverTestActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED"/>
<data android:scheme="package" />
</intent-filter>

<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<data android:scheme="package" />
</intent-filter>

<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED"/>
<data android:scheme="package" />
</intent-filter>
</receiver>

</application>
</manifest>

MyBroadcastReceiver.java:

public class MyBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(final Context context,final Intent intent)
{
final String msg="intent:"+intent+" action:"+intent.getAction();
Log.d("DEBUG",msg);
Toast.makeText(context,msg,Toast.LENGTH_SHORT).show();
}
}

请运行它,看看它是否完美运行。


编辑:如果您的应用适用于 API12 及更高版本,并且只希望处理应用更新的情况,您可以单独使用此 Intent :

http://developer.android.com/reference/android/content/Intent.html#ACTION_MY_PACKAGE_REPLACED

关于安卓 : restart application after update - ACTION_PACKAGE_REPLACED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10728016/

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