【问题标题】:Android ICS native lockscreenAndroid ICS 原生锁屏
【发布时间】:2012-06-03 18:24:51
【问题描述】:

过去 2 天我一直在 SW、google 等网站上寻找。我正在寻找一种方法来实现原生 Android ICS 锁屏附带的活动,如下面的屏幕所示。 这些屏幕来自Player Pro,但我注意到其他播放器(例如PlayerPro)也具有相同的功能,看起来完全相同,这就是为什么我认为它是原生的,或者至少有一种通用的实现方式.

到目前为止,我只设法使用这些标志来获取替换锁屏的 Activity:

  • WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
  • WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD

在这些事件中使用 BroadCaseReciever:

  • Intent.ACTION_SCREEN_ON
  • Intent.ACTION_SCREEN_OFF
  • Intent.ACTION_USER_PRESENT

我的问题是我希望我的活动显示为锁定屏幕而不是替换它。你们知道如何实现吗?

是否有本机隐藏的 API 来执行此操作?

你们能给我链接一些实现此特定功能的示例吗?

提前致谢;)

【问题讨论】:

  • 查看这篇文章:stackoverflow.com/questions/4065201/… 但是,也许从 4.0 开始就有可能,否则 Player Pro 使用自己的 API
  • “它自己的 API”是什么意思?顺便说一句,其他播放器也具有相同的功能(例如 PowerAmp),所以我想这不是 PlayerPro 开发的东西。
  • 它可能是一个对话框片段使用锁定标志时显示?编辑:似乎还有一个 FLAG_SPLIT_TOUCH 允许窗口外的触摸转移到该窗口,如果它有标志...似乎这两者的组合可以允许它
  • 好吧,我试过了,但我无法让它工作,因为我无法显示来自 BroadCastReciever 的对话框,它给出了这个错误“BadTockenException: Unable to add window -- token null is不是为了申请”。你知道如何找回锁屏令牌吗?这将是解决方案。
  • 我还尝试使用 Dialog 样式在我的活动中使用 FLAG_SPLIT_TOUCH,但它仍然不起作用,因为一旦我将“android:windowIsFloating”设置为 true,活动就会在锁屏后显示。没有它不会显示在锁屏的覆盖层中。其他想法?

标签: android lockscreen


【解决方案1】:

你几乎做对了。继续做你对广播接收器所做的事情。这就是要走的路。对于 Window,这些是您需要使用的标志:

  • WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
  • WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL

不要使用 FLAG_DISMISS_KEYGAURD

这些标志的作用:SHOW_WHEN_LOCKED 允许您的活动显示在锁定屏幕的顶部。 FLAG_NOT_TOUCH_MODAL 允许不在您的活动上的触摸事件转到其他活动,即允许用户解锁屏幕。 FLAG_DISMISS_KEYGUARD 摆脱了锁屏,所以我们不使用它。

在您的 res/values/styles.xml 文件中定义此样式

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="Theme.FloatingTranslucent" parent="android:Theme.Translucent.NoTitleBar">
    <item name="android:windowIsFloating">true</item>
  </style>
</resources>

在清单中,定义 Activity 的样式

<activity android:name=".SampleActivity" android:theme="@style/Theme.FloatingTranslucent">
...
</activity>

这样做的目的是让您的活动完全透视并包装内容

现在,您的 Activity 应该位于锁定屏幕的顶部,允许对锁定屏幕和您的应用进行触摸输入,但您的 Activity 不是全尺寸。

干杯。

【讨论】:

  • 您是否已经以这种方式实现了它?因为我尝试过,一旦我将 android:windowIsFloating 设置为 true,即使我设置了 FLAG_SHOW_WHEN_LOCKED,我也无法让 Activity 显示在键盘保护之上
  • 我也尝试将 TYPE_KEYGUARD_DIALOG 设置为窗口类型,但没有任何改变。
  • 你好@Zaid-Daghestani 你有解决方案吗? stackoverflow.com/questions/33466950/…
【解决方案2】:

我想您可能正在寻找 Android 4.0(API 级别 14)中添加的音频控制“远程视图”(RemoteControlClient)API。我在 Android 开发者文档中找到了the RemoteControlClient API

允许公开要使用的信息 通过能够显示元数据、艺术品和媒体的遥控器 传输控制按钮。

(它被链接到this page。)

注意:我自己从未使用过这个 API,如果这对你不起作用,我深表歉意。

【讨论】:

  • +1 这绝对是他想要的,也是他应该使用的与锁定屏幕的原生集成。
  • yeee...终于找到了我想要的答案。 +1 和赏金。我知道有一个 API,但我找不到它。非常感谢,我很高兴我终于可以实现那个锁屏了:D.
  • 注意:开发者门户中不再提供示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多