1. 程式人生 > >螢幕的喚醒與休眠

螢幕的喚醒與休眠

參考文章:http://blog.csdn.net/hufeng882412/article/details/7640123

一般情況下都是手動按電源鍵來休眠螢幕(使螢幕黑屏)或者喚醒螢幕(使螢幕亮屏),但是一些特殊需求要程式碼控制螢幕的亮屏和休眠,需求明確了,具體操作如下:

//監聽滅屏廣播,監聽到就啟動activity,寫在server中

private BroadcastReceiver MyLockScreenReceiver = new BroadcastReceiver() {


@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
System.out.println("receiver--action="+intent.getAction());
/**
* ACTION_SCREEN_OFF表示按下電源鍵,螢幕黑屏
* ACTION_SCREEN_ON 螢幕黑屏情況下,按下電源鍵
*/
if ( intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
System.out.println("receiver.................");
keyguardManager = (KeyguardManager) context
.getSystemService(Context.KEYGUARD_SERVICE);
// 取消預設的鎖屏
keyguardLock = keyguardManager.newKeyguardLock("");
keyguardLock.disableKeyguard();


startActivity(startIntent);
}
}
};

/**
* 啟動鬧玲,設定鬧玲,傳送廣播喚醒螢幕,放在activity的oncreat中
* */
    private  void setAlarm(){
        Intent intent = new Intent("WakeUpScreen");
        intent.setClass(this, AlarmBroadcastReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

alarmManager = (AlarmManager)getSystemService(Service.ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),10000, pendingIntent);
    }

    /**
     * 喚醒螢幕的廣播,喚醒和休眠主要是用了電源管理器,上面的是根據具體需求,我的做法而已
     * */
    public static class AlarmBroadcastReceiver extends BroadcastReceiver {


@SuppressLint("Wakelock")
@Override
public void onReceive(Context context, Intent intent) {

// TODO Auto-generated method stub
//獲取電源管理器物件  
PowerManager pm=(PowerManager) context.getSystemService(Context.POWER_SERVICE);
//獲取PowerManager.WakeLock物件,後面的引數|表示同時傳入兩個值,最後的是LogCat裡用的Tag  
       final PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_DIM_WAKE_LOCK, "bright"); 
String msg = intent.getAction();
if (msg.equals("WakeUpScreen")) {
viewFlipper.startFlipping();//我切換圖片的程式碼,可以不要
LogUtils.i(Tag, "AlarmBroadcastReceiver"+"AlarmBroadcastReceiver");
       wl.acquire();//亮屏
       Handler handler = new Handler();//handle用於自動滅屏
       handler.postDelayed(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
wl.release();//滅屏
}
}, 3000);
}
}
}

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