【问题标题】:Altering the result of getRecentTasks改变 getRecentTasks 的结果
【发布时间】:2011-06-06 23:03:11
【问题描述】:

我有一款专为平板电脑设计的应用,在工作场所中,许多人会将相机作为日常工作的一部分。虽然主管离开应用程序是适当且必要的,但其他人应该很难意外这样做。但是,长按 Home 键很容易意外。我自己做过。这会列出最近的任务;用户可以点击其中任何一个,但他们会迷路,因为其中一些不像普通的智能手机用户那么复杂。

您可以通过 getRecentTasks 以编程方式检索此列表。我的问题是如何从该列表中删除除最新任务(我的)之外的所有任务,将长度减少到一个元素,或更改列出的任务以指向我的应用程序。我知道这是可能的:Toddler Lock 做到了。

我的第一次尝试是修改返回的意图,希望它们通过引用传递。没有这样的运气。还有其他想法吗?

(我不是在说短按 Home 键。我已经想出了一个,部分基于这里找到的东西。)

【问题讨论】:

    标签: android android-homebutton


    【解决方案1】:

    感谢 Toddler Lock 的作者,我曾与他讨论过这个问题。引入的错误完全是我的。

    在您的清单中创建一个禁用的活动,其亲和力等于空字符串。在您的程序中,启用它,然后使用标记为 FLAG_ACTIVITY_NEW_TASK 的意图启动它。它会在最近的活动中出现。禁用该任务,它就会从显示屏上消失。

    足够多的这些,你会淹没最近的活动显示。如果它有办法返回比您拥有的虚拟活动更多的活动,那么用户将能够退出您的程序。

    确保您在退出时禁用这些任务,并确保如果您从最近的活动中选择其中一项任务,您的程序会执行一些合理的操作。

    这是我清单中两个任务的示例:

        <activity android:name="com.foo.android.recentactivity.Clear1"
                  android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
                  android:label="."
                  android:enabled="false"
                  android:icon="@drawable/clearicon"
                  android:taskAffinity="" />
        <activity android:name="com.foo.android.recentactivity.Clear2"
                  android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
                  android:label="."
                  android:enabled="false"
                  android:icon="@drawable/clearicon"
                  android:taskAffinity="" />
    

    【讨论】:

    • 请注意,这显然是对平台的滥用,因此平台将来可能会保护自己免受某些事情的影响。
    • 我尝试使用答案中指定的添加禁用活动并在运行时启用的方法,但它仍然向我显示最近打开的应用程序的最近应用程序列表。简而言之,它的正常行为没有变化。请帮帮我谢谢。
    • 很抱歉听到您遇到问题。我猜我解释的时候不清楚。首先忽略禁用/启用部分 - 一旦你让它工作,你可以摆弄它。最简单的形式是有一个单一的 FLAG_ACTIVITY_NEW_TASK 意图,您的程序在它开始时就会启动,其唯一目的是作为一个额外的启动活动。它不应该做的不仅仅是退出。看看这是否出现在最近的活动中 - 如果没有,那么在意图使用或清单中没有设置正确的东西。一旦你完成了这项工作,再制作五个并将它们相互连接起来。
    • @hackbod - 很抱歉我不得不以这种方式滥用最近的活动列表,但没有提供其他机制。对于大多数应用程序,我不容忍这种活动。无论如何,您仍然可以从最近的应用程序屏幕访问应用程序管理器并杀死有问题的应用程序。 Toddler Lock 似乎利用竞争条件甚至锁定了访问应用程序管理器的能力,但我选择不走那么远,因为我实际上并没有与蹒跚学步的孩子打交道。
    • 需要18个活动,不可思议。
    【解决方案2】:

    您无法通过应用程序执行此操作。您需要使用所需的行为构建自定义系统映像。

    【讨论】:

    • 至少有一个现有的应用程序这样做 - 没有自定义系统映像 - 表明您的答案不正确。下载“Toddler Lock”,运行它,然后按住主页键。
    猜你喜欢
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 2011-09-28
    • 2019-12-22
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多