2014-12-04 102 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();