Android實現長時間不用APP屏幕變暗

jopen 9年前發布 | 4K 次閱讀 Java Android

這個原理很簡單,相信大家都比較熟悉安卓的圖形渲染過程,所以就不介紹了,大概原理就是修改window的亮度,然后達到讓屏幕變黑的效果,通過監聽activity的

dispatchTouchEvent方法來全局監聽屏幕的變化。

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.MotionEvent;
import android.view.WindowManager;

public class BaseActivity extends Activity {

/** 
 * 最大的屏幕亮度 
 */  
float maxLight;  
/** 
 * 當前的亮度 
 */  
float currentLight;  

/** 
 * 用來控制屏幕亮度 
 */  
Handler handler;  

/** 
 * 延時時間 
 */  
long DenyTime = 5 * 1000L;  

@Override  
protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    InitData();  
}  

private void InitData() {  
    handler = new Handler(Looper.getMainLooper());  
    maxLight = GetLightness(this);  
}  

/** 
 * 設置亮度 
 *  
 * @param context 
 * @param light 
 */  
void SetLight(Activity context, int light) {  
    currentLight = light;  
    WindowManager.LayoutParams localLayoutParams = context.getWindow().getAttributes();  
    localLayoutParams.screenBrightness = (light / 255.0F);  
    context.getWindow().setAttributes(localLayoutParams);  
}  

/** 
 * 獲取亮度 
 *  
 * @param context 
 * @return 
 */  
float GetLightness(Activity context) {  
    WindowManager.LayoutParams localLayoutParams = context.getWindow().getAttributes();  
    float light = localLayoutParams.screenBrightness;  
    return light;  
}  

@Override  
protected void onPause() {  
    super.onPause();  
    stopSleepTask();  
}  

@Override  
protected void onResume() {  
    super.onResume();  
    startSleepTask();  
}  

@Override  
public boolean dispatchTouchEvent(MotionEvent ev) {  
    if (currentLight == 1) {  
        startSleepTask();  
    }  
    return super.dispatchTouchEvent(ev);  
}  

/** 
 * 開啟休眠任務 
 */  
void startSleepTask() {  
    SetLight(this, (int) maxLight);  
    handler.removeCallbacks(sleepWindowTask);  
    handler.postDelayed(sleepWindowTask, DenyTime);  
}  

/** 
 * 結束休眠任務 
 */  
void stopSleepTask() {  
    handler.removeCallbacks(sleepWindowTask);  
}  

/** 
 * 休眠任務 
 */  
Runnable sleepWindowTask = new Runnable() {  

    @Override  
    public void run() {  
        SetLight(BaseActivity.this, 1);  
    }  
};  

} </pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!