Muk*_*ani 9 android android-intent android-install-apk android-launcher
我的Android应用程序有一个升级到较新版本的选项,较新版本APK我保持在SD卡路径下可用.单击"升级"选项,我将调用以下方法.
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);
}
Run Code Online (Sandbox Code Playgroud)
我包含FLAG_ACTIVITY_NEW_TASK的原因是,在升级之后,我想要"打开"和"完成"选项,如果我不使用此标志,则不会显示这些选项.
当上面的代码启动包安装程序时,它有两个选项OK&Cancel,当用户按下Cancel时,我想知道用户取消了它.但我无法知道因为onActivityResult被称为pre-maturely.我在阅读以下帖子后发现了这种情况的原因.
Android - startActivityForResult立即触发onActivityResult
他们要求我确保我用于启动活动的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,否则我将无法在成功升级时获得"打开"和"完成"选项.
有人遇到过类似的问题吗?请帮助我,因为它让我疯了.