0

我想知道是否有人知道如何在您解锁屏幕时显示您的应用程序。我有一个应用程序,用户打开蓝牙设备,它连接到手机,用户应该看到一个 UI。让他们寻找应用程序或使用通知菜单不是一个可行的选择(工作量太大,行为不明显)。

问题是:当屏幕解锁时: - 当蓝牙连接到设备时,您可以从后台服务中弹出活动 - 用户很高兴,因为 UI 就在那里

当屏幕被锁定时: - 应用程序启动但被破坏 - 用户解锁手机,除了主屏幕什么都没有

一种解决方法是在应用程序被唤醒时禁用键盘保护,但核选项是一个非常糟糕的选项。

PS:我知道标准的 Android 假设是你不应该这样做。在正常情况下,这种行为很好,但在这种情况下,我明确地做了一些我希望手机做出响应的事情,而不会给用户增加更多的工作要做。根据 Google 的指南,如果您不喜欢这种行为,您可以选择将其关闭,或者您不能使用该应用程序。


更多细节,所以在多看一点之后,问题不一定是当屏幕锁定、解锁并期望它等待时你不能运行活动。如果您执行以下操作,那确实有效:

  • 锁定您的设备
  • 在手机锁定/关闭时通过 Eclipse 运行应用程序
  • 解锁它会等你

但是如果 Activity 已经在运行并且我正在打开一个新窗口(它恰好是一个透明的窗口,说你已经连接并询问他们想要做什么)。问题是它会被杀死

E/BackgroundPOPUP(2436):通过 onCreate 创建的弹出窗口!
I/UsageStats(78):com.test.POPUP 意外恢复,而 com.android.launcher2 中已经恢复
E/BackgroundPOPUP(2436):暂停时弹出
E/MyBacgrkoundService(2436):弹出窗口激活!
I/ActivityManager(78):显示的活动 com.test.POPUP/.PopupTest:175 毫秒(总共 175 毫秒)
I/UsageStats(78):这里出了点问题,没想到 com.android.launcher2 会被暂停
E/BackgroundPOPUP(2436): POPUP 已通过调用 onStop 结束
E/BackgroundPOPUP(2436): POPUP 已通过调用 onDestroy 结束

这里的设置如下:

  • MyBackgroundService是处理蓝牙状态的服务(等待连接,如果用户启动应用程序则打开蓝牙等)。它触发一个BackgroundPOPUP运行 ViewFlipper 的弹出活动。MyBackgroundServiceBackgroundPOPUP一个意图开始。
  • BackgroundPOPUP是一个带有半透明主题的活动(确切地说是 Theme.Translucent),它显示了一个带有一些说明的 ViewFlipper 并提供了一些选项
4

1 回答 1

0

您可以使用KeyGuardManager方法public void exitKeyguardSecurely (KeyguardManager.OnKeyguardExitResult 回调)

安全退出键盘锁。此 api 的用例是,在禁用键盘保护后,您的应用程序(被授予禁用键盘保护并显示被认为安全的有限信息量而无需用户越过键盘保护的权限)需要导航到不安全的内容无需通过键盘锁即可安全查看。如果键盘锁是安全的,这将调出键盘锁的解锁屏幕。参数 callback 让您知道操作是否成功,并且一旦用户通过键盘保护,启动通常被认为是安全的任何东西是安全的。

我不是 100% 确定这符合你想要做的。

另一种选择是使用 public boolean inKeyguardRestrictedInputMode () 检查当您的应用程序唤醒时键盘保护是否打开,以及它是否阻止您的应用程序唤醒直到键盘保护被解锁

于 2010-03-31T15:29:26.107 回答