1,先看看android5.0之前的获取方法:
// 1、得到当前运行的任务栈,参数就是得到多少个任务栈,1就是只拿一个任务栈
// 对应的也就是正在运行的任务栈啦 ,注意别忘了在清单文件中添加获取的权限
List runTaskInfos =
activityManager.getRunningTasks(1);
//拿到当前运行的任务栈
ActivityManager.RunningTaskInfo runningTaskInfo = runTaskInfos.get(0);
//拿到要运行的Activity的包名
runningpackageName = runningTaskInfo.baseActivity.getPackageName();
2,但是5.0之后这个方法失效了。搜索到如下解决方法:
public static String getCurrentPkgName(Context context) {
ActivityManager.RunningAppProcessInfo currentInfo = null;
Field field = null;
int START_TASK_TO_FRONT = 2;
String pkgName = null;
try {
field = ActivityManager.RunningAppProcessInfo.class.getDeclaredField("processState");
} catch (Exception e) { e.printStackTrace(); }
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List appList = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo app : appList) {
if (app.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
Integer state = null;
try {
state = field.getInt( app );
} catch (Exception e) { e.printStackTrace(); }
if (state != null && state == START_TASK_TO_FRONT) {
currentInfo = app;
break;
}
}
}
if (currentInfo != null) {
pkgName = currentInfo.processName;
}
return pkgName;
}
3,然而上面的方法是得到却是当前Activity的进程名,一般进程名就是包名,但是如果在Manifest设置Activity的进程名,上面方法就无效了,如:
android:name="com.xxx.demo.DemoActivity"
android:process=".aaa" />
Log.d(TAG, "当前包名:" + runningpackageName );
06-05 11:09:44.284 32215-32276/com.xxx.demo D/AppService﹕ 当前包名:.aaa
4,除了上面获取方法,,求android 5.0之后获取当前运行的activity的包名的方法。
你想得到什么包名,是本app的包名么?直接在Activity中
this.getPackageName();
我有一个折中的办法,在JAVA端运行ps程序,拿到结果,根据结果把进程名比对,可以获得进程pid和uid,Android上应用都有自己的uid,然后通过pid和uid获取包名
请问你是怎么解决的??求方法
可以通过RunningAppProcessInfo对象拿到uid,通过下面方法就能拿到包名
getPackageManager().getPackagesForUid(uid);
两种方法都测试了 还是取不到
题主你好,最近碰巧也在做类似的功能。我是这么获取的:
ActivityManager activityManager = (ActivityManager) getContext().getSystemService(Context.ACTIVITY_SERVICE);
String _pkgName = activityManager.getRunningTasks(1).get(0).topActivity.getPackageName();
在MX4(Flyme5.0 基于Android5.1)上测试可行。
弱弱的问一下,这个getSystemService报错,需要引进什么包?
上一条整错地方了……
ListappList = am.getRunningAppProcesses();
打漏了泛型了
ListappList = am.getRunningAppProcesses();
打漏了泛型了
都没用啊这两种方法
for (ActivityManager.RunningAppProcessInfo app : appList)
类型不一样怎么搞
List appList = am.getRunningAppProcesses();
List appList = am.getRunningAppProcesses();