getRunningTasks API从Android LL开始 权限收敛

来源:互联网 发布:freeswitch 源码 编辑:程序博客网 时间:2024/05/04 01:11

 

最近在做的一个小项目中,需要实时获取Activity栈顶以及它所属的App Process

根据之前的了解,知道Android API有提供一个接口

 

public List<ActivityManager.RunningTaskInfo> getRunningTasks (int maxNum)

 

可以得到系统当前正在运行的Task列表,用maxNum限制要获取的数量(最近使用的最先取出)。

 

实际运行程序时,发现并不能实时获取当前的Activity栈顶。

(使用的是Android L的机器进行调试)

 

原因:

Android L开始,Google开始对getRunningTasks接口进行限制使用。

默认情况下,普通的三方应用(非系统应用不能使用该接口)

 

之前,使用该接口需要 android.permission.GET_TASKS

即使是自己开发的普通应用,只要声明该权限,即可以使用getRunningTasks接口。

但从L开始,这种方式以及废弃。

应用要使用该接口必须声明权限android.permission.REAL_GET_TASKS

而这个权限是不对三方应用开放的。(在Manifest里申请了也没有作用)

系统应用(有系统签名)可以调用该权限。

 

同时,查阅了ActivityManager里该接口的源码,对于普通的三方应用,应该只是允许eng版本的debug使用,而且google不建议在应用的核心逻辑里使用该接口。

 

Android LL版本上使用该接口出现问题的话,可以参考以上内容。

Google这样做的原因还是出于安全考虑,对普通应用开发该接口可能会造成用户的隐私泄露。

 

2 2
原创粉丝点击