【问题标题】:How to display Activity when the screen is locked?屏幕锁定时如何显示Activity?
【发布时间】:2010-09-25 09:26:16
【问题描述】:

我的应用程序在汽车停靠事件中启动,我想在插入设备时唤醒手机(由系统完成)并解锁屏幕。

有可能吗?

【问题讨论】:

  • 我希望不是,我不希望我的手机随时解锁! (我可能会误拨...)
  • 我很想将其编辑为“如何在屏幕锁定时显示我的活动”,因为您无法在 android 中以编程方式“解锁”设备...
  • 确实,正如 SrikeForceZero 解释的那样,您不能以编程方式“解锁”设备。下面的答案似乎表明您可以真正做的是展示如何使特定 Activity 交互式 而设备总体上保持锁定

标签: android locking screen


【解决方案1】:

我用于将活动提升到顶层

    private Window wind;
    @Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    /******block is needed to raise the application if the lock is*********/
    wind = this.getWindow();
    wind.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
    wind.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
    wind.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON);
    /* ^^^^^^^block is needed to raise the application if the lock is*/
}

【讨论】:

  • 谢谢。即使我把它放在 OnCreate 上也能完美运行。
  • 我不知道。请测试此方法并告诉我们!
  • 不适用于 KitKat。屏幕亮起,但在用户解锁屏幕之前不会显示活动。
  • 完美。正是我需要的。谢谢
【解决方案2】:

使用 Activity.getWindow() 获取活动的窗口;使用 Window.addFlags() 在 WindowManager.LayoutParams 中添加您想要的以下标志:FLAG_DISMISS_KEYGUARDFLAG_SHOW_WHEN_LOCKEDFLAG_TURN_SCREEN_ON

这是标准车载底座(和桌面底座)应用程序实现此行为的方式。

【讨论】:

  • 很酷,它可以工作,但这些标志仅适用于 sdk 版本 5 及更高版本:(
  • 找到了通用方法,在这里查看我的答案stackoverflow.com/questions/3621599/wake-android-device-up/…
  • 主要无法让它在 ICS 即服务上运行。我什至尝试创建一个执行此操作的活动
  • 此时 API 5 及更高版本拥有大约 99% 的市场份额。当您可以使用这些标志时,我认为没有理由使用技巧。
  • 不知何故对我来说这不起作用。我在我的 BroadcastReceiver 调用的活动的 onCreate() 中添加了标志,在警报传入时,由 AlarmManager 设置。调用 onCreate,设置标志,但手机保持黑色并锁定。
【解决方案3】:

您将只能将FLAG_DISMISS_KEYGUARD 用于没有启用安全锁(如图案锁)的手机。

FLAG_SHOW_WHEN_LOCKED 只会将你当前的 Activity 放在顶部,如果用户试图移动到其他地方,他将不得不解锁屏幕。

或者,您可以在清单中添加权限:

<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>

并且,在您的创建活动中:

KeyguardManager manager = (KeyguardManager) this.getSystemService(Context.KEYGUARD_SERVICE);
KeyguardLock lock = manager.newKeyguardLock("abc");
lock.disableKeyguard(); 

【讨论】:

    【解决方案4】:

    当使用锁定模式或 pin 条目时,我还需要添加以下内容,因为屏幕在 5 秒内关闭:

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      相关资源
      最近更新 更多