天天看点

android 获取栈顶activty的方法总结(兼容API 5.0)        * 必要权限: * 涉及的TASK()方法:       * 遇到问题:处理方法:

  声明:本文为Dujinyang CSDN原创投稿文章,未经许可,禁止任何形式的转载。 

最近5.0\6.0\7.0 安卓系统都陆续上岗了,兼容性和代码更新是个很头疼的问题,这次我们来说下TASK的基础和API 4.4以上解决方法;

<uses-permission android:name = “android.permission.GET_TASKS”/>

下面我们就来仔细的深入吧~

   首先我们先来看下调用Task相关的方法和使用:

然后问题出现了:~~~~(>_<)~~~~

在android 5.0 版本后 获取栈顶应用的方法 getRunningTask方法被google给屏蔽掉了!

在5.0之前获取的方法是:API (4.4以下)

为啥?

原因是Android 5.0在API权限上作了修改:

Android L, Google has disabled getRunningTasks. Now it can only return own apps task and the home launcher.

     其实就是使用UsageStatsManager获取,但是这种获取方法需要用户在手机上赋予APP权限才可以使用,就是在安全-高级-有权查看使用情况的应用在这个模块中勾选上指定APP就可以获取到栈顶的应用名。那么现在问题来了,如何调用系统提供的常量打开“有权查看使用权限的应用”界面。

  其实是使用:

Settings.ACTION_USAGE_ACCESS_SETTINGS

                 根据此常量打开设置--“有权查看使用权限的应用”,不过在很多系统中被去掉了,如:小米、魅族等~

下面上代码:

判断当前设备中有没有“有权查看使用权限的应用”这个选项

判断调用该设备中“有权查看使用权限的应用”这个选项的APP有没有打开 

然后定义一个Button跳转:

最后添加权限:

   参考文档:http://stackoverflow.com/questions/24625936/getrunningtasks-doesnt-work-in-android-l

                 上面的stackoverflow网址里面还有其它解决方法;

调用:

如果是代码层开发者可以忽略以下内容~

Android还为开发者提供了adb(Android Debug Bridge),这是非常强大的调试工具。最常用的自然是logcat来显示日志记录。另外一个很强大的指令就是这里要提到的<code>dumpsys。</code><code>dumpsys</code>还可以添加不同的参数来指示需要输出哪一类Service的信息。对于本文提到的内容,需要查看的就是<code>activity</code>,指令就是:

输入上述指令,就能得到关于设备非常长的一段讯息,单是也能清晰看出它们比较详细的分类:

android 获取栈顶activty的方法总结(兼容API 5.0)        * 必要权限: * 涉及的TASK()方法:       * 遇到问题:处理方法:

每一个类别都有一个括号内容,给出了更加详细的指令来查看该类别下更多具体内容。因此再来尝试指令:

android 获取栈顶activty的方法总结(兼容API 5.0)        * 必要权限: * 涉及的TASK()方法:       * 遇到问题:处理方法:
android 获取栈顶activty的方法总结(兼容API 5.0)        * 必要权限: * 涉及的TASK()方法:       * 遇到问题:处理方法:

整个log显示了当前所有在运行的任务栈,它们的<code>id</code>分别是什么。对于每个Task,也有Activity数量等信息,同时也列出了其中的Activity列表,并且对于每个Activity也有比较详细的描述,比如启动它的Intent的内容。

如果觉得内容过多,只想看看栈的内容,也可以直接跳到”Running activities (most recent first)”那部分,比较简洁而又明了的列出了栈中得Activity列表,就能知道当按下返回键的时候会应该会回到哪个Activity以后是要退出程序。

对于”Running activitie”s的内容在<code>dumpsys activity</code>中就有,并不需要<code>dumpsys activity activities</code>,也可以用下边的指令来限制仅输出”Running activities”列表:

adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p'

缺点

很明显的看出,使用<code>adb shell</code>的相对于之前的方式的明显好处就是不需要添加额外的代码,而且任务栈的信息也更加详尽。但是同样的它只能输出Activity的类名,对于具体属性没有记录。

<code>adb shell</code>对于调试Android程序有很多的帮助,可惜对于adb指令都没有比较全面详细而又系统的教程。只能靠在实践中慢慢摸索,从网上零星介绍中获得。

_____________________________________________________________________________________________________________________

继续阅读