简体   繁体   English

屏幕无法在Android中使用唤醒锁打开

[英]Screen not turning on with wake lock in Android

I have a foreground service that is waiting for a shake. 我的前台服务正在等待摇动。 When it receives that motion, it sends out a broadcast with: 收到该动议后,它将发出以下广播:

Intent i = new Intent("com.company.app.shakeDetectedMessage");
sendBroadcast(i);

My main activity receives this with a broadcast receiver which implements the method: 我的主要活动是通过实现该方法的广播接收器接收的:

@Override
    public void onReceive(Context context, Intent intent)
    {
        MainActivity.this.turnOnScreen();
        Toast.makeText(getApplicationContext(), "Screen ON", Toast.LENGTH_SHORT).show();
    }

And my turn on screen method: 和我打开屏幕的方法:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

I have a partial wake lock with 我有一个部分唤醒锁

PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE);
    PowerManager.WakeLock mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "SensorRead");
    mWakeLock.acquire();

declared in the service 在服务中声明

Yet, when I turn my screen off and shake, the screen doesn't turn on! 但是,当我关闭屏幕并摇晃时,屏幕无法打开! I verified that every method is working with logs. 我验证了每种方法都可以使用日志。 The onReceive is working even when the screen is off. 即使屏幕关闭,onReceive也可以正常工作。 The broadcast is working. 广播正在播放。 Just the screen won't turn on! 只是屏幕无法打开!

call the acquire method of WakeLocker class 调用WakeLocker类的获取方法

Class : 类:

public abstract class WakeLocker {
    private static PowerManager.WakeLock wakeLock;

    public static void acquire(Context context) {
        if (wakeLock != null) wakeLock.release();

        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK |
        PowerManager.ACQUIRE_CAUSES_WAKEUP |
        PowerManager.ON_AFTER_RELEASE, "WakeLock");
        wakeLock.acquire();
    }

    public static void release() {
        if (wakeLock != null) wakeLock.release(); wakeLock = null;
    }
}

Permission Required : 所需权限

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

This is working for me 这对我有用

    PowerManager powerManager = getService(this, POWER_SERVICE);
    mScreenLock = powerManager.newWakeLock(
            PowerManager.SCREEN_BRIGHT_WAKE_LOCK |
            PowerManager.ACQUIRE_CAUSES_WAKEUP, "Lock");
    mScreenLock.acquire();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM