Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android中的唤醒锁定未打开屏幕_Java_Android_Eclipse_Oop_Wakelock - Fatal编程技术网

Java Android中的唤醒锁定未打开屏幕

Java Android中的唤醒锁定未打开屏幕,java,android,eclipse,oop,wakelock,Java,Android,Eclipse,Oop,Wakelock,我有一个前台服务,正在等待震动。当它接收到该运动时,它发送一个广播,其中包括: Intent i = new Intent("com.company.app.shakeDetectedMessage"); sendBroadcast(i); 我的主要活动通过广播接收器接收此信息,该接收器实现以下方法: @Override public void onReceive(Context context, Intent intent) { MainActivity.th

我有一个前台服务,正在等待震动。当它接收到该运动时,它发送一个广播,其中包括:

Intent i = new Intent("com.company.app.shakeDetectedMessage");
sendBroadcast(i);
我的主要活动通过广播接收器接收此信息,该接收器实现以下方法:

@Override
    public void onReceive(Context context, Intent intent)
    {
        MainActivity.this.turnOnScreen();
        Toast.makeText(getApplicationContext(), "Screen ON", Toast.LENGTH_SHORT).show();
    }
以及我的开机方法:

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);
我有一个部分唤醒锁

PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE);
    PowerManager.WakeLock mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "SensorRead");
    mWakeLock.acquire();
在服务中声明

然而,当我关掉屏幕摇晃时,屏幕却没有打开!我验证了每个方法都与日志一起工作。即使屏幕关闭,onReceive仍在工作。广播正在播放。只是屏幕无法打开

这对我有用

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

调用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;
    }
}
所需权限

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