【问题标题】:Screen not turning on with wake lock in Android在 Android 中使用唤醒锁无法打开屏幕
【发布时间】:2015-02-01 18:54:17
【问题描述】:

我有一个前台服务正在等待抖动。当它接收到该动作时,它会发送一个广播:

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 也能正常工作。广播正在工作。只是屏幕打不开!

【问题讨论】:

    标签: java android eclipse oop wakelock


    【解决方案1】:

    调用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" />   
    

    【讨论】:

      【解决方案2】:

      这对我有用

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-08
        • 1970-01-01
        • 2020-02-28
        • 1970-01-01
        • 1970-01-01
        • 2012-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多