我想知道是否有人了解如何在解锁屏幕时显示您的应用程序。我有一个应用程序,用户打开蓝牙设备,它连接到手机,用户应该看到一个用户界面。让他们寻找应用程序或使用通知菜单不是一个可行的选择(太多的工作,而不是明显的行为)。
问题在于: 屏幕解锁时: - 当蓝牙连接到设备时,您可以从后台服务弹出活动 - 用户很高兴,因为用户界面就在那里
屏幕锁定时: - 应用程序启动但被销毁 - 用户解锁手机,但主屏幕上没有任何内容
一个解决方法是在应用程序被唤醒时禁用键盘锁,但核选项是一个非常糟糕的选择。
PS: 我知道标准的Android假设是你不应该这样做。在正常情况下,这种行为很好,但在这种情况下,我明确地做了一些我希望手机响应而不为用户添加更多工作的事情。根据Google的指导原则,如果您不喜欢此行为,可以选择关闭此功能,或者您无法使用该应用程序。
还有一些细节,所以在看了这个之后,问题不一定是你在屏幕被锁定时无法运行活动,解锁并期望它等待。如果您执行以下操作,这确实有效:
但是在活动已经运行的情况下,我正在建立一个新的窗口(恰好是一个透明的窗口,说你已经连接并询问他们想做什么)。问题是它被杀了
E/BackgroundPOPUP( 2436): POPUP created via onCreate! I/UsageStats( 78): Unexpected resume of com.test.POPUP while already resumed in com.android.launcher2 E/BackgroundPOPUP( 2436): POPUP onPause E/MyBacgrkoundService( 2436): POPUP active! I/ActivityManager( 78): Displayed activity com.test.POPUP/.PopupTest: 175 ms (total 175 ms) I/UsageStats( 78): Something wrong here, didn't expect com.android.launcher2 to be paused E/BackgroundPOPUP( 2436): POPUP has ended through a call to onStop E/BackgroundPOPUP( 2436): POPUP has ended through a call to onDestroy
此处的设置如下:
MyBackgroundService
是一个处理蓝牙状态的服务(等待连接,如果用户启动应用程序则打开蓝牙等)。它会触发一个运行ViewFlipper的弹出BackgroundPOPUP
活动。 MyBackgroundService
通过意图启动BackgroundPOPUP
。BackgroundPOPUP
是一个半透明主题的活动(准确地说是Theme.Translucent),它显示了一个带有一些说明的ViewFlipper并提供了一些选项答案 0 :(得分:0)
您可以使用KeyGuardManager方法 public void exitKeyguardSecurely(KeyguardManager.OnKeyguardExitResult回调)
安全地退出键盘锁。使用 这个api的情况是,之后 禁用键盘,你的应用程序, 被授予的权限 禁用键盘并显示一个 被视为有限的信息量 没有用户过去的安全 键盘,需要导航到 一些不安全的东西 没有越过钥匙守卫。 如果键盘安全,这将是 调出解锁屏幕 键盘锁。参数回调让我们 你知道这次行动是否合适 成功,发射是安全的 通常会发生的任何事情 用户具有安全性 越过了钥匙卫士。
我并非100%确定这符合您的要求。
另一种选择是使用公共布尔值inKeyguardRestrictedInputMode()检查应用程序唤醒时是否启用了键盘锁,以及是否阻止应用程序唤醒,直到键盘锁解锁为止