【问题标题】:How to switch to other running application如何切换到其他正在运行的应用程序
【发布时间】:2011-05-28 06:18:01
【问题描述】:

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

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

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

【问题讨论】:

    标签: android android-intent switch-statement


    【解决方案1】:

    这很容易。

        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 
    

    【讨论】:

    • 你打了我几秒 :)
    • 感谢您的支持,努力争取代表,并充分利用迟到!
    • 谢谢。我还有一个问题。我已经有了要切换到的应用程序调用“ABC”的数据包名称:com.abc。那么如何获取 ABC 的 topActivity.className 呢?
    • 对不起,代码在 cmets 中的显示方式,但是如果您已经有了“包”名称,那么当您循环时...String className = ""; ActivityManager am = (ActivityManager); inst.getSystemService(Context.ACTIVITY_SERVICE); for(RunningTaskInfo t: am.getRunningTasks(10)){ if(t.topActivity.getPackageName()).contains("com.abc"){ className = t.topActivity.getClassName(); } }
    • @rogerl:不要挑剔,但你错过了 startActivity() 的右括号,并且“android.Manifest.permission.GET_TASKS”应该是“android.permission.GET_TASKS”:P
    【解决方案2】:

    使用

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多