Android中的唤醒锁定屏幕无法启动

way*_*way 2 java eclipse oop android wakelock

我有一个等待摇动的前台服务.当它收到该动作时,会发出一个广播:

Intent i = new Intent("com.company.app.shakeDetectedMessage");
sendBroadcast(i);
Run Code Online (Sandbox Code Playgroud)

我的主要活动是通过广播接收器实现这个方法:

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

我开启了屏幕方法:

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);
Run Code Online (Sandbox Code Playgroud)

我有一个部分唤醒锁定

PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE);
    PowerManager.WakeLock mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "SensorRead");
    mWakeLock.acquire();
Run Code Online (Sandbox Code Playgroud)

在服务中声明

然而,当我关闭屏幕并摇动时,屏幕无法开启!我验证了每种方法都在使用日志.即使屏幕关闭,onReceive也能正常工作.广播正在发挥作用.只是屏幕无法开启!

Bha*_*ani 5

调用WakeLocker类的acquire方法

课程:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

许可要求:

<uses-permission android:name="android.permission.WAKE_LOCK" />   
Run Code Online (Sandbox Code Playgroud)