【问题标题】:How to close other App in multi-screen mode如何在多屏模式下关闭其他App
【发布时间】:2023-01-18 19:57:15
【问题描述】:

因此,如果我单击一个按钮,谷歌地图应用程序将打开并与我的应用程序分开屏幕,到目前为止一切顺利。 但是如果我再次点击按钮,我想关闭谷歌地图(或者至少发送到后台)。到目前为止,在我尝试过的所有情况下,我的应用程序都会关闭并且地图会全屏显示。 如果我在手机上进行“后退”滑动,它会关闭地图,但无论哪种方式,地图都会有一个后退栈,所以如果我在应用程序中做很多事情,它会变得很费力..

基本上我想将我的应用程序切换回全屏 - android studio 中的多窗口

关于如何解决这个问题的任何想法?

case R.id.mapsview:
                    if (DBG) Log.d(TAG, "Show Maps");
                    switchMultiWindow();
                    return true;

@RequiresApi(api = Build.VERSION_CODES.N)
public void switchMultiWindow(){
    if (mapsOpen){
        mapsOpen = false;
        moveTaskToBack(true);

    }else{
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setPackage("com.google.android.apps.maps");
        intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT |
                Intent.FLAG_ACTIVITY_NEW_TASK |
                Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
        startActivity(intent);
        mapsOpen = true;
    }
}

【问题讨论】:

    标签: java google-maps android-intent flags back-stack


    【解决方案1】:

    要关闭在多窗口模式下打开的应用程序,您可以使用 finishAndRemoveTask() 方法。此方法将完成活动并将其从最近的任务列表中删除。

    您可以在启动 Google 地图应用程序后在您的 switchMultiWindow() 方法中调用此方法,以在再次单击该按钮时将其关闭。

    
    @RequiresApi(api = Build.VERSION_CODES.N)
    public void switchMultiWindow(){
        if (mapsOpen){
            mapsOpen = false;
            moveTaskToBack(true);
            finishAndRemoveTask();
        }else{
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setPackage("com.google.android.apps.maps");
            intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT |
                    Intent.FLAG_ACTIVITY_NEW_TASK |
                    Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
            startActivity(intent);
            mapsOpen = true;
        }
    }
    
    
    

    请务必注意,finishAndRemoveTask() 仅适用于 API 级别 21 (Android 5.0 Lollipop) 及更高版本。此外,此方法需要FLAG_ACTIVITY_NEW_TASK要设置的标志。

    另一种方法是使用moveTaskToBack(true)将应用程序发送到后台。此方法会将应用程序移至后台,但不会从最近的任务列表中删除该任务。此方法适用于旧版本的 Android。

    您还可以使用 Intent.ACTION_CLOSE_SYSTEM_DIALOGS 操作关闭其他应用程序。您可以将此操作发送到要关闭的应用程序包。

    【讨论】:

    • 如果我调用 finishAndRemoveTask() 仍然关闭我的活动而不是地图......
    【解决方案2】:

    根据您提供的代码,当您点击一个按钮时,您似乎正试图在您的应用程序和 Google 地图应用程序之间切换。

    您正在使用 moveTaskToBack(true) 方法将您的应用程序发送到后台并将 Google 地图应用程序带到前台。再次单击该按钮时,您将使用 Intent 类以多窗口模式启动 Google 地图应用程序。

    但是,在这种情况下,moveTaskToBack(true) 方法不会关闭 Google Maps 应用程序,它只是将您的应用程序发送到后台,因此 Google Maps 应用程序仍然在前台保持打开状态。

    此问题的一个可能解决方案是使用 finish() 方法在再次单击按钮时关闭您的应用程序。这将关闭您的应用程序并将 Google 地图应用程序带到前台。以下是如何使用 finish() 方法的示例:

    @RequiresApi(api = Build.VERSION_CODES.N)
    public void switchMultiWindow(){
        if (mapsOpen){
            mapsOpen = false;
            finish();
        }else{
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setPackage("com.google.android.apps.maps");
            intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT |
                    Intent.FLAG_ACTIVITY_NEW_TASK |
                    Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
            startActivity(intent);
            mapsOpen = true;
        }
    }
    

    重要的是要注意,如前所述,finish()方法将关闭您的应用程序和任务中的所有活动,因此应谨慎使用。

    另一种选择是最小化您的应用程序而不是关闭它,在这种情况下,您可以使用Intent.FLAG_ACTIVITY_CLEAR_TOP 最小化该应用程序并将 Google 地图应用程序置于前台。

    @RequiresApi(api = Build.VERSION_CODES.N)
    public void switchMultiWindow(){
        if (mapsOpen){
            mapsOpen = false;
            Intent intent = new Intent(this, MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
        }else{
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setPackage("com.google.android.apps.maps");
            intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT |
                    Intent.FLAG_ACTIVITY_NEW_TASK |
                    Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
            startActivity(intent);
            mapsOpen = true;
        }
    }
    

    请务必记住,应用程序在多窗口模式下的行为可能因 Android 版本和特定应用程序而异,因此建议在您的目标设备上测试此解决方案。

    【讨论】:

      猜你喜欢
      • 2018-09-23
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多