开发者社区> 问答> 正文

android 5.0之后如何获取当前运行的应用包名?

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的包名的方法。

展开
收起
爵霸 2016-06-16 10:13:18 6527 0
1 条回答
写回答
取消 提交回答
  • 可以通过RunningAppProcessInfo对象拿到uid,通过下面方法就能拿到包名
    getPackageManager().getPackagesForUid(uid);

    2019-07-17 19:40:23
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载