Android锁屏小部件


76

一些用户一直在问我我的应用程序的Android锁定屏幕小部件-我相信他们想要一个保留在锁定屏幕上并允许他们与该应用程序交互的小部件。

我至今尚未找到任何官方文档-我发现的唯一一件事就是将主屏幕小部件放置在锁定屏幕上的应用程序。

关于我在哪里了解有关构建真正的锁屏小部件的更多信息?


3
没有官方支持修改锁定屏幕。实际上,如果能够提出适用于所有设备的黑客程序,我会感到非常惊讶。
CommonsWare,2010年

@Commonsware:确实有。签出MixZing,他们有一个启用它的选项,并且该小部件位于锁定屏幕顶部。它曾经有免费版本,并且可以在我的Desire中使用,无需生根。
xandy

1
@xandy:MixZing可以选择是一个锁屏,但是应该如何帮助提问者创建一个锁屏呢?
梅琳达·格林

@MelindaGreen:至少以MixZing为例,我们知道这是可能的
Yogesh Maheshwari 2012年

3
锁屏小部件仅在Android 4.2中引入。因此,您可能想再看一遍。
马丁

Answers:


56

锁屏互动很难。Android允许使用两个窗口标志(FLAG_SHOW_WHEN_LOCKED和FLAG_DISMISS_KEYGUARD)进行基本操作。FLAG_SHOW_WHEN_LOCKED的工作原理非常一致,即使启用了安全性,它也会显示在锁定屏幕的顶部(不会绕过安全性,您无法切换到另一个非FLAG_SHOW_WHEN_LOCKED窗口)。

如果您只是做一些临时性的事情,例如在播放音乐或类似音乐时,您可能会没事。如果您尝试创建自定义锁屏,则在所有不同的android平台上都会有很多异常的交互。(“帮助!如果不重新启动HTC手机,我将无法关闭闹钟”)。

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

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html

FLAG_SHOW_WHEN_LOCKED

窗口标志:用于锁定屏幕时显示窗口的特殊标志。

FLAG_DISMISS_KEYGUARD

窗口标志:设置该窗口后,仅当它不是安全锁键盘锁时,才会导致键盘锁被关闭。由于安全性不需要这样的键盘锁,因此如果用户导航到另一个窗口(与FLAG_SHOW_WHEN_LOCKED相反,FLAG_SHOW_WHEN_LOCKED则只会暂时隐藏安全和不安全的键盘锁,但确保它们在用户移至其他位置时再次出现),它将永远不会再次出现。另一个不会隐藏它们的UI)。如果键盘锁当前处于活动状态并且是安全的(需要解锁图案),则除非看到FLAG_SHOW_WHEN_LOCKED也已设置,否则用户仍然需要在看到此窗口之前对其进行确认。常数值:4194304(0x00400000)


1
谢谢,但是我可以将其用于小部件吗?从稀疏的文档来看,这似乎可以由“活动”视图使用,但是我不确定如何为窗口小部件设置此设置,因为操作系统会渲染窗口小部件,而应用程序只是为其发送数据。
psychotik

6
不可以,这只能用于活动。在锁定屏幕上显示实际的Android“应用程序小部件”(developer.android.com/guide/topics/appwidgets/index.html)的唯一方法是通过WidgetLocker之类的程序。MixZing的“锁定屏幕小部件”是活动,而不是“应用程序小部件”。
Kevin TeslaCoil

1
那么MixZing如何使他们的活动看起来像小部件?
Psychotik

2
谢谢@凯文。这真的很有帮助。但是,有一个问题,当启用锁定屏幕时,您如何做才能使活动启动,而不仅仅是继续显示活动已经处于活动状态时屏幕是否被锁定?
Andrew Hubbs

11
您可以为SCREEN_OFF和/或SCREEN_ON注册广播接收器。SCREEN_OFF的优点是用户不一定会看到股票锁定屏幕,因为在用户打开屏幕时已经全部设置了股票锁定屏幕。SCREEN_ON的优点是您可以检查inKeyguardRestrictedInputMode,以便知道库存锁定屏幕处于活动状态。有时屏幕会由于其他原因而关闭,例如接近传感器。
Kevin TeslaCoil 2011年


11

我必须为我的项目实现一个锁屏小部件。在此过程中,我积累了一些资源。

  1. 如果您有要放在锁定屏幕上的应用程序,请首先将其设为appwidget。您可以使用AppWidget该类来执行此操作。
  2. 现在,使用AppWidgetHostAndroid API中的类使锁屏成为窗口小部件的主机。我不知道该怎么做,但是有一些现有的实现,例如mylockandroid(下面的链接)。

资源资源

http://code.google.com/p/mylockforandroid/ (注意,此代码适用于旧版Android。Android4.2及更高版本已内置锁屏小部件支持)

http://mylockandroid.blogspot.com/2010/03/widget-lockscreen-beta-11-r2.html


当然,如果要在锁定屏幕上显示小部件,则必须在SCREEN_ON上创建一个Activity,并且可以在该Activity中使用AppWidgetHost。因为它在答案中的位置,所以有些含糊。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.