Android(安卓)5.0之后如何获取topStack
16lz
2021-01-26
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;}
更多相关文章
- Android之WebView和js交互-调用失败的看这里
- Android(安卓)8.0以后获取SSID为的解决方式
- Android调试命令收录
- Android(安卓)Internet应用实现获取天气预报的示例代码
- Android滚动截屏,ScrollView截屏
- GPS代码学习---Framework代码学习
- Android获取验证码倒计时实现代码
- Android中创建Message两种方法比较,new Message和obtainMessage
- Android(安卓)BaseAdapter 简单封装