代码之家  ›  专栏  ›  技术社区  ›  Sandman

使用安全密钥保护,活动之间的转换很奇怪

  •  3
  • Sandman  · 技术社区  · 12 年前

    我有我的主要活动A,当用户按下一个按钮时,我打开另一个活动B。但当发生这种情况时,B不只是出现在A的顶部:

    • A消失
    • 安全键盘出现
    • B出现

    当我摆脱了B,同样的事情也会发生。这很烦人,因为屏幕上有很多没有真正意义的闪烁。有没有办法在键盘保护处于活动状态时实现从A到B的直接转换,而不将这两个活动合并为1?

    以下是我在onCreate中为这两项活动所做的工作:

    getWindow().addFlags(
            WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                    | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                    | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    

    下面是我如何开始活动:

            final Intent intent = new Intent(Sand.this, EditRule.class);
            intent.putExtra(DB.KEY_PARENT_ID, id);
            intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            startActivityForResult(intent, 0);
            overridePendingTransition(0, 0);
    

    我还尝试在活动主题中设置一个空的android:windowAnimationStyle,但没有成功。

    更新 :我提交了此错误: https://code.google.com/p/android/issues/detail?id=68465&thanks=68465&ts=1397301860

    谢谢 特奥牌手表

    1 回复  |  直到 12 年前
        1
  •  1
  •   mik3y    12 年前

    大约一年前,我在ICS和JB上(与其他几位工程师)广泛研究了这一问题。无法避免闪烁,我强烈怀疑KitKat的情况仍然如此。你应该把那个bug归档。

    (如果你看一下安卓系统中与Keyguard相关的源代码,这是一个相当。。 巨大的 大量的代码/政策充斥着特殊情况。由于这个案例在任何地方都没有明确的文档记录,即使您可以让它在一个版本上运行,我也不会依赖它的一致性。)

    最终,我们解决了这个问题,将所有不可闪烁的锁屏UI组合成一个“活动”。这很不愉快,但它奏效了。

    推荐文章