【问题标题】:Android Lock Screen WidgetAndroid 锁屏小工具
【发布时间】:2011-05-06 04:26:53
【问题描述】:

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

我还没有找到任何官方文档 - 我发现的唯一东西是可以将主屏幕小部件并为您将它们放在锁定屏幕上的应用程序。

有什么线索可以让我了解更多关于构建真正的锁屏小部件的信息吗?

【问题讨论】:

  • 官方不支持修改锁屏。事实上,如果有可能想出一个适用于所有设备的 hack,我会感到相当惊讶。
  • @Commonsware:确实有。查看 MixZing,他们有一个启用它的选项,并且该小部件保持在锁定屏幕的顶部。它曾经以免费版本提供,并且可以在我的 Desire 中使用,无需生根。
  • @xandy:MixZing 可以选择成为一个锁屏,但这应该如何帮助提问者创建一个?
  • @MelindaGreen:以 MixZing 为例,至少我们知道这是可能的
  • 锁屏小部件仅在 Android 4.2 中引入。所以你可能想再看看它。

标签: android android-widget lockscreen


【解决方案1】:

锁屏交互很困难。 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)

【讨论】:

  • 谢谢,但我可以将它用于小部件吗?从稀疏的文档来看,这看起来像是 Activity 视图可以使用的东西,但我不确定如何为小部件设置它,因为操作系统呈现小部件,而应用程序只是为它发送数据。
  • 不行,这个只能用于活动。在锁定屏幕上显示实际 Android“App Widget”(developer.android.com/guide/topics/appwidgets/index.html)的唯一方法是通过(免责声明,我的应用程序)WidgetLocker 之类的程序。 MixZing 的“锁屏小部件”是一个活动,而不是“应用小部件”。
  • 那么 MixZing 如何让他们的活动看起来像一个小部件?
  • 谢谢@Kevin。这真的很有帮助。但是有一个问题,当启用锁屏时,您如何使 Activity 启动,而不仅仅是在 Activity 处于活动状态时继续显示屏幕是否被锁定?
  • 您可以为 SCREEN_OFF 和/或 SCREEN_ON 注册广播接收器。 SCREEN_OFF 的优点是用户不一定会看到股票锁定屏幕,因为在用户打开屏幕时它已经全部设置好了。 SCREEN_ON 的优点是您可以检查 KeyguardRestrictedInputMode 以便您知道股票锁定屏幕处于活动状态。有时屏幕会因其他原因而关闭,例如接近传感器。
【解决方案2】:

官方锁屏小部件文档是here

【讨论】:

  • +1:不幸的是,它需要 android 4.2 及更高版本,而我只有 android 2.2 :-(
  • 从 5.0 开始我们也删除了它们
  • 购买新的操作系统设备
【解决方案3】:

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

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

资源

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

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

【讨论】:

  • 当然,如果你想在锁屏上显示一个小部件,你必须在 SCREEN_ON 上创建一个 Activity,在这个 Activity 中你可以使用 AppWidgetHost。因为它在答案中的表现方式有点模棱两可。
猜你喜欢
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 1970-01-01
  • 2013-01-15
  • 1970-01-01
相关资源
最近更新 更多