gpt4 book ai didi

安卓应用更新问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:04:22 25 4
gpt4 key购买 nike

最近我一直面临着我的 android 应用程序更新过程的问题。

简而言之,应用程序能够检查是否在服务器上上传了具有更高版本代码的更新。如果是,用户决定是否更新。加载该应用程序并开始标准安装后:

final Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(PATH_TO_APK)), "application/vnd.android.package-archive");
startActivity(intent)

问题是,当 android Intent 完成安装时,“理论上” Activity 带有信息“应用程序已安装”和 2 个按钮“完成”、“打开”。我写“理论上”是因为到目前为止我遇到过以下情况:

  1. 应用程序已安装,显示消息“应用程序已安装”的 Activity ,用户单击“打开”但没有任何反应(Android 2.3.*)或应用程序确实正确地自行打开 - 此行为是随机的。

  2. 应用程序已安装,显示消息“应用程序已安装”的 Activity 但突然消失。

试图绕过这个错误(?)我找到了http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_REPLACED .我实现的 BroadcastReceiver 启动了 Launch Activity,可以说这是一个合适的解决方案。

         <receiver android:name=\".MyReceiver\" >
<intent-filter>
<action android:name="android.intent.action.ACTION_PACKAGE_REPLACED" />
//Or from API 12 <action android:name="android.intent.action.ACTION_MY_PACKAGE_REPLACED" />
</intent-filter>
</receiver>

必须修改此解决方案,因为 API 较低(低于 12)的应用程序无法处理 ACTION_MY_PACKAGE_REPLACED,因此我实现了 API 相关行为:

  • 允许正常安装 udpate 应用程序并使用“完成”/“打开”按钮从 Activity 启动应用程序 (API < 12)

  • 在注意到 ACTION_MY_PACKAGE_REPLACED 后通过 MyReceiver 启动了更新应用。

这是我目前的解决方案。

我的问题是:

  • 为什么在 API 低于 12 的 android 中安装更新后的应用程序后点击“打开”随机打开?

  • 为什么带有“完成”/“打开”按钮的 Activity 在 API 更高的设备上消失了?

我试图在安装前完成应用程序,但没有帮助。

我的解释是,在安装过程之后,新包必须覆盖旧包,因此必须简单地删除旧包,这是启动 Activity 消失的主要原因。

正如我所写,这是我目前的解决方案,我并不满意。如果有人能澄清此事,我将不胜感激。

感谢阅读。

编辑:

好的,解决方案非常简单:要成功更新,您需要将 Intent 作为新任务启动(arrrgh...):

final Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(PATH_TO_APK)), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

最佳答案

首先,在 Manifest 中添加“intent-filter”,如下所示:

`<activity android:name="com.package.MainActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="file" />
<data android:mimeType="application/vnd.android.package-archive" />
</intent-filter>
</activity>`

然后,为新任务设置 Intent 标志:

intentAPK.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

关于安卓应用更新问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17822869/

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