android5.0之前可以用下面代码获取

List<ActivityManager.RunningTaskInfo>infos=activityManager.getRunningTasks(1);Stringpackname=infos.get(0).topActivity.getPackageName();
而android5.0之后

该方法已经被Google禁用,那么我们该如何获取呢,经过百度,Google发现很多人也遇到了一样的问题,
通过结合网上的案例,我做了一些修改,
原理,通过ActivityManager获取运行的进程,然后经过过滤获得优先级高处于栈顶的进程,然后通过该进程的uid获得该进程的包名
publicstaticStringgetCurrentPkgName(Contextcontext){ActivityManager.RunningAppProcessInfocurrentInfo=null;Fieldfield=null;intSTART_TASK_TO_FRONT=2;StringpkgName=null;try{field=ActivityManager.RunningAppProcessInfo.class.getDeclaredField("processState");}catch(Exceptione){e.printStackTrace();}PackageManagerpackageManager=context.getPackageManager();ActivityManageram=(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);List<ActivityManager.RunningAppProcessInfo>appList=am.getRunningAppProcesses();for(ActivityManager.RunningAppProcessInfoapp:appList){if(app.importance==ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND&&app.importanceReasonCode==ActivityManager.RunningAppProcessInfo.REASON_UNKNOWN){Integerstate=null;try{state=field.getInt(app);}catch(Exceptione){e.printStackTrace();}if(state!=null&&state==START_TASK_TO_FRONT){currentInfo=app;break;}}}Stringpackename=null;if(currentInfo!=null){packename=packageManager.getNameForUid(currentInfo.uid);}returnpackename;}

更多相关文章

  1. Android之WebView和js交互-调用失败的看这里
  2. Android(安卓)8.0以后获取SSID为的解决方式
  3. Android调试命令收录
  4. Android(安卓)Internet应用实现获取天气预报的示例代码
  5. Android滚动截屏,ScrollView截屏
  6. GPS代码学习---Framework代码学习
  7. Android获取验证码倒计时实现代码
  8. Android中创建Message两种方法比较,new Message和obtainMessage
  9. Android(安卓)BaseAdapter 简单封装

随机推荐

  1. android关机充电流程、充电画面显示
  2. Kernel.org hacked – how to get Androi
  3. Android(安卓)Library Project 使用问题
  4. 解析Android消息处理机制:Handler/Thread/
  5. Android(安卓)开发环境配置
  6. 详解Android中的屏幕方向
  7. Android(安卓)实现全屏和无标题栏的显示
  8. Android(安卓)NDK 环境搭建(Native Devel
  9. RelativeLayout常用属性介绍
  10. Android预定义样式