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

时间:2011-05-28 06:18:02

标签: android android-intent switch-statement

我想编写一个应用程序来切换到其他正在运行的应用程序,例如“Windows任务管理器”上的“切换到”。

我已经拥有它的包名,进程名,pid,标签。但我不知道如何切换到它。请帮助我!谢谢你!

P / S:我正在考虑使用Intent,但是Intent.setClassName(String pkname,String cls name)需要类名,我不知道如何获取它。

2 个答案:

答案 0 :(得分:5)

这很简单。

    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 

答案 1 :(得分:1)

使用

List<ActivityManager.RunningTaskInfo> getRunningTasks();

返回设备上正在运行的任务列表。

如果您查看RunningTaskInfo API,则会有一个字段public ComponentName baseActivity

ComponentName,on有两个公共方法:

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);
     }