【问题标题】:Android FLAG_SHOW_WHEN_LOCKED when invoking activity from history从历史记录中调用活动时的 Android FLAG_SHOW_WHEN_LOCKED
【发布时间】:2015-05-29 12:57:34
【问题描述】:

我一直在尝试使用 FLAG_SHOW_WHEN_LOCKED 和 FLAG_DISMISS_KEYGUARD 来在每次有人打开屏幕时显示一个活动。它在大多数情况下运行良好,但在某些情况下会导致奇怪的行为。当活动已经存在并且我在它被移回历史堆栈后使用 Home 按钮向它发送一个意图时,就会发生这种情况。

首先,如果我在 Activity 上按下 Home 按钮,然后关闭和打开屏幕,预计 Activity 会立即显示。然而,显示的是基本的安卓锁屏。我的活动落后了。

最糟糕的是,有时,如果我触摸主屏幕,然后关闭并打开屏幕,主屏幕覆盖(所有应用程序徽标和小部件)会在后台显示我的活动!

每次屏幕关闭时我使用的意图是 laucn 并召回活动:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION);
context.startActivity(intent);

所以,当我的活动在历史堆栈中时,似乎有时无法正确调用并绕过 android 锁屏。我的意图有问题吗?

【问题讨论】:

    标签: android android-intent lockscreen


    【解决方案1】:

    添加更多标志:

            WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
            WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
    

    通过Intent.addFlags() 或在您的活动中使用getWindow().addFlags() 消亡。当您的活动开始时,这些标志将禁用锁屏

    这将解决您的问题

    参考答案:Here

    【讨论】:

    • 不,我无法打开屏幕。因为我的活动是在屏幕关闭时创建的,所以它在屏幕打开时立即准备就绪。我正在这半秒内做一些工作,并加载一个 webview。所以我不能让我的用户在屏幕打开后等待网页加载。
    • Up :我尝试添加这些标志,但我什至不工作。如果我的活动不在历史堆栈顶部,Android 锁屏仍会显示
    【解决方案2】:

    您可以将Adenda SDK 集成到您的应用中,以实现您的目标。它们让您可以相对轻松地在锁定屏幕上显示您想要的内容。

    我隶属于 Adenda,以供全面披露

    【讨论】:

    • 我只是想知道为什么我的活动在来自历史堆栈时没有正确显示。这是我遇到的最后一个问题,此时我不想改变一切。
    猜你喜欢
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 2011-08-13
    相关资源
    最近更新 更多