Android Google GCM - 当设备处于睡眠模式并启用安全性时,是否可以显示警报?

时间:2012-07-29 19:19:33

标签: android android-ndk google-cloud-messaging

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

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

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

非常感谢您的反馈。

我尝试了“FLAG_SHOW_WHEN_LOCKED”,因为keygaurdmanager已被弃用,但由于某种原因它无效。屏幕亮起但安全模式仍然存在。

1 个答案:

答案 0 :(得分: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上测试,模拟器&lt; = ICS)。如果可以,请尝试让我知道它是否有效。

<小时/> 修改

我不确定,这似乎是blog post