Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以编程方式在Android应用程序之间切换_Android_Start Activity_Android Recents_Split Screen Multitasking - Fatal编程技术网

如何以编程方式在Android应用程序之间切换

如何以编程方式在Android应用程序之间切换,android,start-activity,android-recents,split-screen-multitasking,Android,Start Activity,Android Recents,Split Screen Multitasking,为了调试的目的,我想在两个运行的Android应用程序(客户端和服务器)之间快速切换。两者通过插座连接。理想情况下,我想在两者之间添加一个按钮来切换到另一个(保留连接),这样我就可以很容易地看到两端发生了什么 以下是我尝试过的: 使用“最近的应用”按钮 这很好,但有点尴尬,尤其是当堆栈很大时 使用拆分屏幕 这也很好,但小屏幕有问题 尝试了第三方应用程序切换,但不喜欢这些 已按包名尝试startActivity(单击按钮) 这将是我的首选解决方案,但有问题。切换为Ok,但每次创建、启动新任务并将

为了调试的目的,我想在两个运行的Android应用程序(客户端和服务器)之间快速切换。两者通过插座连接。理想情况下,我想在两者之间添加一个按钮来切换到另一个(保留连接),这样我就可以很容易地看到两端发生了什么

以下是我尝试过的:

  • 使用“最近的应用”按钮
    这很好,但有点尴尬,尤其是当堆栈很大时

  • 使用拆分屏幕
    这也很好,但小屏幕有问题

  • 尝试了第三方应用程序切换,但不喜欢这些

  • 已按包名尝试startActivity(单击按钮)
    这将是我的首选解决方案,但有问题。切换为Ok,但每次创建、启动新任务并将其推送到堆栈上时(不保留连接)。代码如下:

    void switchToClient()       // from Server (on Button click)
    {
        // Alternative Flags Tried: none, FLAG_ACTIVITY_SINGLE_TOP, FLAG_ACTIVITY_NEW_TASK, other
        Intent intent;
        intent = this.getPackageManager().getLaunchIntentForPackage( "com.example.Client" );
        intent.setFlags( Intent.FLAG_ACTIVITY_NEW_TASK );
        startActivity( intent );
    }  
    

我终于想出了如何在应用程序之间切换 编程(保存它们的状态)。在每个应用程序中,我都使用“getTaskId()”获取其任务id,并将其保存到/sdcard/上的一个文件中

然后,在每个应用程序中,单击一个按钮,我就会呼叫

void switchTask()
{
  int tid;
  ActivityManager am;
  am = (ActivityManager)Ctx.getSystemService( Context.ACTIVITY_SERVICE );
  tid = getPkgTaskId();  // read task id of *other* app from file
  am.moveTaskToFront( tid, 0, null );
}
注意:这些需要权限:

  • 读取外部存储器
  • 写入外部存储器
  • 重新排序任务