【问题标题】:Android - Go back to MainActivity after restarting task from recentsAndroid - 从最近重新启动任务后返回 MainActivity
【发布时间】:2023-03-28 20:35:02
【问题描述】:

我有 MainActivity,我可以在其中启动相机应用程序来拍摄和上传照片。在相机应用程序中长按主页并从最近返回后,我返回相机应用程序。如何始终从最近或单击启动器图标返回 MainActivity?

我的相机应用意图:

private void showCamera() {
    try {
         Intent cameraIntent = new Intent(
         android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

         path = Utils.getOutputMediaFileUri(getApplicationContext());

         cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, path);

        startActivityForResult(cameraIntent, Constant.CAMERA_REQUEST);
    } catch (ActivityNotFoundException ex) {
    } catch (Exception ex) {
    }

}

【问题讨论】:

    标签: android android-activity android-task


    【解决方案1】:

    执行此操作的正确方法是将FLAG_ACTIVITY_NO_HISTORY 添加到您用于启动相机的Intent,如下所示:

        Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        cameraIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
        path = Utils.getOutputMediaFileUri(getApplicationContext());
        cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, path);
        startActivityForResult(cameraIntent, Constant.CAMERA_REQUEST);
    

    通过添加NO_HISTORY 标志,您告诉Android 您不希望相机Activity 留下历史痕迹。当用户离开摄像头Activity(即:按下HOME键,或接听来电)时,摄像头Activity将立即结束。当用户然后返回到您的应用程序(通过从最近任务列表中选择它,或者通过按主屏幕上的应用程序图标)时,相机 Activity 将不再位于顶部。

    【讨论】:

    • 感谢您的回答!目前最好的解决方案,一切都按我的意愿工作,但是有一个问题:在最常见的情况下,当我从 MainActivity 启动 cameraIntent -> 拍照 -> 保存它 -> 在 onActivityResult() 方法中我收到 RESULT_CANCELED某些原因。此外,我总是收到带有此意图标志的 RESULT_CANCELED。为什么?相机活动是否在返回结果之前完成?
    • 这可能是个问题。这种情况非常复杂。你为什么想要这种行为?如果用户离开您的应用时将摄像头放在顶部,则标准行为是返回摄像头 Activity
    • 我已经使用更简单的机制尝试了此代码,我只需启动相机Activity 拍摄照片并将其返回onActivityResult()(未指定EXTRA_OUTPUT)。这行得通,我得到了 RESULT_OK 和照片。如果相机Activity 正在启动其他Activity 来保存照片,这可能会导致您看到的问题。
    • 我需要这种行为来避免我的主要问题。主要问题是,如果用户在相机 Activity 中离开我的任务并且在此系统终止任务后,返回我的应用程序任务并拍照后 MainActivity 并不总是重新启动,有时用户会看到主屏幕)
    • 啊...那么您应该尝试解决您的主要问题,而不是花时间在这样的解决方法上。很难完全按照您想要的方式工作,因为您需要使用startActivityForResult() 来启动相机Activity。这意味着相机Activity 必须在您的任务中运行(它不能在单独的任务中运行)。
    【解决方案2】:

    在你的主要活动中

    android:launchMode="singleTask"
    

    在 Manifest.xml 文件夹中

    【讨论】:

    • stackoverflow.com/questions/5223897/…这篇文章回答了你所有的问题
    • 谢谢,但这不起作用。我仍然从最近返回相机应用程序。我将添加我的相机意图代码。
    • 链接的问题有缺陷。答案大多是错误的,并没有解决 OP 的实际问题。
    • 更改启动模式并不能解决问题。这个答案是错误的。
    【解决方案3】:

    在您的主要活动清单中

    android:excludeFromRecents="true" 
    android:launchMode="singleTask"
    

    【讨论】:

    • 谢谢,这是一种解决方案,但不是我想要的。这将我的整个应用程序排除在最近的应用程序之外。我不希望这样,我只想从图标和最近返回 MainActivity。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多