Android软件包安装程序-如何同时获得“打开”和“完成”以及活动结果?

问题描述 投票:9回答:2

我的Android应用程序可以选择升级到较新版本,较新版本APK我将其保留在sdcard中的路径下。单击“升级”选项时,我将调用以下方法。

    public static void launchInstaller(Activity act, String apkPath)
    {
       Intent intent = new Intent(Intent.ACTION_VIEW);
       intent.setDataAndType(Uri.fromFile(new File(apkPath)), "application/vnd.android.package-archive");
       intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
       act.startActivityForResult(intent, 0);
    }

之所以包含FLAG_ACTIVITY_NEW_TASK,是因为升级后我想拥有“打开”和“完成”选项,如果我不使用此标志,则不会显示这些选项。

当以上代码启动软件包安装程序时,它具有两个选项“确定”和“取消”,当用户按“取消”时,我想知道用户已将其取消。但是我不知道,因为onActivityResult被过早调用。在阅读以下帖子后,我就知道为什么会发生这种情况。

Android - startActivityForResult immediately triggering onActivityResult

onActivityResult() called prematurely

他们要求我确保用于启动活动的Intent上未设置FLAG_ACTIVITY_NEW_TASK。看到这里:

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

尤其要注意:“当呼叫者处于从正在启动的活动中请求结果。“

如果活动是作为新任务的一部分启动的,则Android将立即使用RESULT_CANCELED调用onActivityResult()因为一项任务中的活动无法将结果返回给另一项任务,只有同一任务中的活动才能这样做。

但是就我而言,我无法删除FLAG_ACTIVITY_NEW_TASK,因为否则,成功升级后,我将不会获得“打开”和“完成”选项。

有人遇到过类似的问题吗?请帮助我,因为它使我发疯。

android android-intent android-install-apk android-launcher
2个回答
3
投票

您应该使用添加了包的广播意图。创建广播接收器监听package added.如果添加的软件包等于您的软件包,则用户确认安装,否则取消安装过程。如果您询问android可以返回哪种附加功能,则android返回有关程序包的EXTRA_UID。 PackageManager的方法将uid转换为package。(getPackagesForUid(int uid)返回String数组,但通常会在短时间内返回数​​组中的一项,通常数组长度等于1。


0
投票

我在FLAG_ACTIVITY_NEW_TASK上遇到了同样的问题,请在下面的链接中找到我找到的解决方案。

https://tool.oschina.net/uploads/apidocs/android/resources/samples/ApiDemos/src/com/example/android/apis/content/InstallApk.html

© www.soinside.com 2019 - 2024. All rights reserved.