android 5.0适配TopActivity获取
来源:互联网 发布:2015网络歌曲男 编辑:程序博客网 时间:2024/05/20 23:36
最近因为项目需要,调研了下android 5.0 获取topActivity的方法,网上相关资料比较少,特写出来跟大家分享下。
5.0以下系统获取topActivity的方法,相信大家都很熟悉了,比较容易找,总结起来我用过的大概有两种:
ActivityManager am = (ActivityManager) context.getSystemService(Activity.ACTIVITY_SERVICE);
if (am == null) {
return null;
}
List<RunningTaskInfo> tasks = am.getRunningTasks(1);
if (tasks != null && !tasks.isEmpty()) {
ComponentName componentName = tasks.get(0).topActivity;
if (componentName != null) {
return componentName.getClassName();
}
}
这个可以得到目前topActivity的类名,注意是类名而不是包名,想获取包名调用getPackageName方法
第二种是专门针对输入法服务的
PackageInfo pkgInfo;
pkgInfo = mContext.getPackageManager().getPackageInfo(InputMethodService.getCurrentInputEditorInfo().packageName, 0);
mTopActivity = pkgInfo.packageName;
这里的InputMethodService使用时要把它换成自己的输入法服务对象,这个调用会获取引起输入法弹起界面的应用包名
下面来说5.0系统,5.0系统第一种方法已经不适用了,它会始终获取LauncherActivity的类名,由于安全性,还是怎么考虑,5.0里面已经不提供获取topActivity类名的方法了,只能获取包名,还得采取另一种方式,至少我没有调研出来方法,所以只能退而求其次的取其包名,至于包名的获取,上面说的第一种方法不可用,第二种仍然适用,此外还有种通用的方法,代码如下:
public static String getTopActivity(Context context) {if (context == null) {return null;}ActivityManager am = (ActivityManager) context.getSystemService(Activity.ACTIVITY_SERVICE);if (am == null) {return null;}if (Build.VERSION.SDK_INT <= 20) {List<RunningTaskInfo> tasks = am.getRunningTasks(1);if (tasks != null && !tasks.isEmpty()) {ComponentName componentName = tasks.get(0).topActivity;if (componentName != null) {return componentName.getClassName();}}} else {RunningAppProcessInfo currentInfo = null; Field field = null;int START_TASK_TO_FRONT = 2;String pkgName = null;try {field = RunningAppProcessInfo.class.getDeclaredField("processState");} catch (Exception e) {return null;}List<RunningAppProcessInfo> appList = am.getRunningAppProcesses();if (appList == null || appList.isEmpty()) {return null;}for (RunningAppProcessInfo app : appList) {if (app != null && app.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {Integer state = null;try {state = field.getInt(app);} catch (Exception e) {return null;}if (state != null && state == START_TASK_TO_FRONT) {currentInfo = app;break;}}}if (currentInfo != null) {pkgName = currentInfo.processName;}return pkgName;}return null;}
其中20是区分5.0系统的分水岭。
- android 5.0适配TopActivity获取
- 获取当前task的topactivity
- 获取当前task的topactivity
- Android5.0以上获取topActivity的包名方法与以下的整合
- 代码实现TopActivity方法
- getRunningTasks() deprecated之后如何获得topActivity
- android获取签名,兼容5.0
- Android适配 获取手机屏幕的分辨率
- Android 7.0获取文件Uri适配
- android 5.0 获取 当前app包名
- android 5.0 获取最近运行的应用
- android 5.0 获取屏幕状态方式
- Android 5.0以后获取Running App/Process
- android SHA1获取(代码获取)
- android 机器码获取/ 品牌获取 / 型号获取
- android 目录获取
- Android GPS获取地理位置
- Android获取屏幕大小
- 1.3.2 查看服务器信息 4
- MFC在MM_ANISOTROPIC映射模式下使用双缓冲
- 图片异步加载AsyncTask以及ListView中item加载图片缓存
- sad truth
- 求圆的面积
- android 5.0适配TopActivity获取
- linux as6.3安装Oracle11g: 安装界面乱码
- 正则表达式 备忘 查询
- 搜狗手机浏览器测试管理方法(一)
- Java实现定时任务的三种方法
- Keepalived+HAproxy负载均衡
- 分享几个AndroidSDK镜像源
- c/c++语言让程序默认以管理员权限运行
- Spring框架搭建