我想编写一个应用程序来切换到其他正在运行的应用程序,例如“Windows任务管理器”上的“切换到”。
我已经拥有它的包名,进程名,pid,标签。但我不知道如何切换到它。请帮助我!谢谢你!
P / S:我正在考虑使用Intent,但是Intent.setClassName(String pkname,String cls name)需要类名,我不知道如何获取它。答案 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);
}