2014-12-04 65 views
2

我有一个前台服务正在等待一个动摇。当它接收到的运动,它会发出广播用:屏幕没有在Android中打开唤醒锁定

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(); 
部分唤醒锁0

在服务中声明

但是,当我关闭屏幕并震动时,屏幕无法打开!我确认每种方法都使用日志。 onReceive即使在屏幕关闭的情况下也能正常工作。广播正在工作。只是屏幕不会打开!

回答

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; 
    } 
} 

需要权限

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

这是为我工作

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