78

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

我还没有找到任何官方文档——我唯一找到的是可以获取主屏幕小部件并将它们放在锁定屏幕上的应用程序。

关于我在哪里了解更多关于构建真正的锁屏小部件的任何线索?

4

3 回答 3

57

锁屏交互困难。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 相比,它只会暂时隐藏安全和非安全的键盘保护,但确保它们在用户移动到时重新出现另一个不隐藏它们的 UI)。如果键盘保护当前处于活动状态并且是安全的(需要解锁模式),那么用户在看到此窗口之前仍需要确认它,除非还设置了 FLAG_SHOW_WHEN_LOCKED。常数值:4194304 (0x00400000)

于 2011-01-12T06:57:42.797 回答
29

官方锁屏小部件文档在这里

于 2012-11-16T01:12:12.323 回答
11

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

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

资源

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

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

于 2011-03-22T03:00:05.260 回答