如何切换到其他正在运行的应用程序

问题描述

| 我想编写一个应用程序以切换到其他正在运行的应用程序,例如\“ Windows Task Manager \”上的\“ Switch to \”。 我已经有了它的包名,进程名,PID,标签。但是我不知道如何切换到它。请帮助我!感谢你! P / S:我正在考虑使用Intent,但是Intent.setClassName(字符串pkname,字符串cls名称)需要类名,而我不知道如何获得它。     

解决方法

        那很容易。
    ActivityManager am = (ActivityManager) inst.getSystemService(Context.ACTIVITY_SERVICE);
    for(RunningTaskInfo t: am.getRunningTasks(10)){
        String packageName = t.topActivity.getPackageName();
        String className = t.topActivity.getClassName();
    }
    //Which one do you want?
    //Could also just do
    String packageName = am.getRunningTasks(1).get(0).topActivity.getPackageName();
    String className = am.getRunningTasks(1).get(0).topActivity.getClassName();

    //then
    startActivity(new Intent().setClassName(packageName,className).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    //Keep in mind you will need to declare the following permission in your AndroidManifest.xml
    android.Manifest.permission.GET_TASKS 
    ,        使用
List<ActivityManager.RunningTaskInfo> getRunningTasks();
返回设备上正在运行的任务的列表。 如果您查看
RunningTaskInfo
API,那么会有一个字段
public ComponentName baseActivity
ComponentName,具有以下两个公共方法:
String getClassName()
返回此组件的类名称。
String getPackageName()
返回此组件的软件包名称。
     ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
     for (ActivityManager.RunningTaskInfo info : am.getRunningTasks(9999)){
         int id = info.id;
         Log.d (\"AM\",\"ID: \" + id);
         String name = info.baseActivity.getClassName();
         Log.d (\"AM\",\"Class: \" + name);
     }