我想知道是否有人知道如何让您的应用程序在解锁屏幕时显示。我有一个应用程序,用户打开蓝牙设备,连接到手机,用户应该看到一个用户界面。让他们寻找应用程序或使用通知菜单不是一个可行的选项(工作太多,而不是明显的行为)。用户解锁屏幕后会显示Android活动
的问题是: 当屏幕解锁: - 你可以弹出从后台服务活动时,蓝牙连接到设备 - 用户是幸福的,因为UI就在那里
当屏幕被锁定: - 应用程序被启动,但被破坏 - 用户解锁手机并没有什么是有,但主屏幕
一个解决将禁用键盘锁,当应用程序被唤醒了,但核选项一个非常糟糕的选择。
PS: 我知道标准的Android假设是你不应该这样做。在正常情况下,这种行为没有问题,但在这种情况下,我明确地做了一些事情,我希望手机能够响应,而无需为用户添加更多工作。根据Google的指导原则,如果您不喜欢这种行为,可以选择关闭此功能或者无法使用该应用程序。
一些更多的细节,所以看这多一点的问题后,并不一定是你不能在运行时的屏幕被锁定,解锁并期望它会等活动。如果你这样做了以下这确实工作:
- 锁定您的设备
- 运行通过Eclipse的应用程序,而手机被锁定/关闭
- 解锁,它会等着你
但是在Activity已经在运行的情况下,我正在打开一个新窗口(这恰好是一个透明的窗口,说你已经连接并询问他们想做什么)。问题是,它就会被杀死
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
是处理蓝牙状态(等待连接的serivce,如果用户启动应用开启蓝牙,等等。)。它会触发运行ViewFlipper的弹出BackgroundPOPUP
活动。通过意图开始MyBackgroundService
开始BackgroundPOPUP
。BackgroundPOPUP
是半透明的主题活动(Theme.Translucent要准确),它显示了一些指令ViewFlipper,并提出一些选项
感谢醒来停止你的应用程序!我不知道inKeyguardRestrictedInputMode(),这有帮助。 我在上面添加了一些细节,所以我希望能够在用户使用它时等待用户的活动窗口,但它似乎正在被杀死。我认为你根本无法完成这项活动,但当你新建一个流程时,它确实有效。 这可能是因为它是一个透明的窗口,所以我会检查。 Android在某些情况下似乎对待它们的方式会有所不同,所以也许这是真正的问题。 – Dave 2010-03-31 16:20:40
玩了一会之后,我无法找到一种天真的工作方式。即您说'startActivity'并且与屏幕是否开启/锁定/关闭无关,用户将看到活动(可能是他们解锁屏幕时)。 如果屏幕关闭/锁定,活动将被破坏,因此我所做的是触发静态方法,检查是否启用了键盘锁。如果是,则等待用户解锁屏幕以发送startActivity意图。现在我正在使用计时器,但我会稍微切换到ACTION_USER_PRESENT。 – Dave 2010-04-03 22:41:09