问题描述
|
我想编写一个应用程序以切换到其他正在运行的应用程序,例如\“ 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);
}