【发布时间】:2014-08-26 18:02:06
【问题描述】:
背景
My app 允许按最近启动的时间对应用列表进行排序。
问题
从 Android "L" 开始,函数 getRecentTasks 将只返回当前应用已启动的应用列表,如 documentation 中所述:
如果您的应用使用 ActivityManager.getRecentTasks()...
随着新的并发文档和活动的引入 即将发布的版本中的任务功能(请参阅并发文档和 活动在最近的屏幕下方), ActivityManager.getRecentTasks() 方法现在已被弃用以改进 用户隐私。为了向后兼容,这个方法仍然返回一个 其数据的一小部分,包括调用应用程序自己的 任务和可能的其他一些非敏感任务(例如家庭)。如果 您的应用正在使用此方法来检索自己的任务,请使用 android.app.ActivityManager.getAppTasks() 而不是检索那个 信息。
使用 ADT 显示该函数的文档时也是这样写的(目前在 Internet 上不可用):
此方法已弃用。自 L 起,此方法不再可用 到第三方应用程序:作为以文档为中心的引入 最近意味着它可以将个人信息泄露给来电者。为了 向后兼容性,它仍将返回其一小部分 数据:至少调用者自己的任务(尽管参见 getAppTasks() 检索该信息的正确支持方式),并且可能 其他一些已知不敏感的任务,例如家。
我不明白为什么要采取这种行动,因为很容易看到用户拥有哪些应用程序,即使没有任何许可。
问题是,这是我添加的这个功能的一个很大的限制,所以我希望有办法克服这个问题。
我尝试过的
目前,我只使用启发式方法来了解最近启动了哪些应用程序 - 我得到的是正在运行的进程列表。
我也可以使用流程的重要性值,也许还有“importanceReasonComponent”,但这只是所有的启发式和猜测......
问题
有没有办法克服这个限制?有什么我没有想到的解决方法?
也许有可能用root?还是 BusyBox?
【问题讨论】:
-
好吧,他们说原因:
the ActivityManager.getRecentTasks() method is now deprecated to improve user privacy -
我真的没有答案,但是对于“我不明白为什么要删除它”部分,我想通过 L 引入的新的“以文档为中心”的任务,你会'已经能够知道用户打开了哪些文档或单个网页。
-
@ianhanniballake 是的,我读过。我只是不同意它有助于隐私,因此我对此发表了一点评论。
-
@matiash 是的,我已经阅读了所有内容(或者至少我在这里发布的内容),并且还观看了视频,但我在这里要求另一种方法或解决方法,甚至如果需要 root/BusyBox。获取当前应用启动的内容并没有多大帮助...
-
主演this issue 并希望 Google 在 L 正式发布之前改变主意似乎是最好的选择。
标签: android process android-5.0-lollipop android-task