Android ICS 原生锁屏

Posted

技术标签:

【中文标题】Android ICS 原生锁屏【英文标题】:Android ICS native lockscreen 【发布时间】: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 来执行此操作?

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

提前致谢;)

【问题讨论】:

查看这篇文章:***.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,活动就会在锁屏后显示。没有它不会显示在锁屏的覆盖层中。其他想法? 【参考方案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 你有解决方案吗? ***.com/questions/33466950/…【参考方案2】:

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

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

(它被链接到this page。)

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

【讨论】:

+1 这绝对是他想要的,也是他应该使用的与锁定屏幕的原生集成。 yeee...终于找到了我想要的答案。 +1 和赏金。我知道有一个 API,但我找不到它。非常感谢,我很高兴我终于可以实现那个锁屏了:D. 注意:开发者门户中不再提供示例。

以上是关于Android ICS 原生锁屏的主要内容,如果未能解决你的问题,请参考以下文章

Android虚线可绘制潜在ICS错误

在 Android 4+ (ICS) 中为 aSmack 使用 Android TrustStore

android怎么代码实现锁屏

Android 中的 GROUP BY 子句(ICS 及以上)

如何在 Android ICS 上检查 *** 连接状态

android锁屏开发难题,系统锁出现后如何自动取消的问题