Android實現長時間不用APP屏幕變暗
這個原理很簡單,相信大家都比較熟悉安卓的圖形渲染過程,所以就不介紹了,大概原理就是修改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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!