2

我们使用 Google Cloud Messaging 在 Android 设备上接收消息。如果设备处于启用安全性的睡眠模式,是否可以在设备上显示 GCM 消息。(使用 API > 2.3....4.0)。

设备将通过模式或面部识别来保护。无论设备的状态如何,我们都希望显示 GCM 消息。理想情况下,我们希望设备保持锁定状态但也显示消息,如果不可能,我们可以自动解锁设备并唤醒以显示消息。

有一个应用程序可以在设备上显示来自 GCM 的消息。因此,我的问题归结为是否允许应用程序在使用模式安全锁定的设备上显示消息。

非常感谢您的反馈。

我已经尝试过“FLAG_SHOW_WHEN_LOCKED”,因为 keygaurdmanager 已被弃用,但由于某种原因它不起作用。屏幕亮起,但安全模式保持开启。

4

1 回答 1

0

我想我明白你想要什么。如果不是请忽略我的回答。

首先将这些权限添加到您的AndroidManifest.xml

<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>

在我的应用程序中,我通过活动向用户展示了消息,然后在 中onCreate(),我使用了以下代码:

import android.app.KeyguardManager;
import android.os.PowerManager;
import android.view.WindowManager;

// ...

private KeyguardManager.KeyguardLock mKeyguardLock;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // ...

    KeyguardManager km = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
    mKeyguardLock = km.newKeyguardLock(ClassName);
    mKeyguardLock.disableKeyguard();

    PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(
            PowerManager.ACQUIRE_CAUSES_WAKEUP
                    | PowerManager.FULL_WAKE_LOCK, ClassName);
    wl.acquire();

    getWindow().addFlags(
            WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                    | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                    | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                    | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
}// onCreate()

确保在以下位置重新启用键盘保护onDestroy()

@Override
protected void onDestroy() {
    super.onDestroy();
    mKeyguardLock.reenableKeyguard();
}// onDestroy()

我刚刚从博客文章中复制了这些代码(不幸的是我不记得它在哪里)。它有效(minSdkVersion= 7,在真实设备 2.x 上测试,在模拟器 <= ICS 上)。如果可以,请尝试让我知道它是否有效。


编辑

我不确定,好像是这篇博文

于 2012-08-01T13:33:04.070 回答