【Android】实现类似于百度长时间不用APP屏幕变暗

这个原理很简单,相信大家都比较熟悉安卓的图形渲染过程,所以就不介绍了,大概原理就是修改window的亮度,,然后达到让屏幕变黑的效果,通过监听activity的

dispatchTouchEvent方法来全局监听屏幕的变化。

2解决方案:

直接上代码了,有注释,可以作为一个基类,这样你就可以让所有的子类实现这个效果了。

package com.example.test;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;@Overrideprotected 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;}@Overrideprotected void onPause() {super.onPause();stopSleepTask();}@Overrideprotected void onResume() {super.onResume();startSleepTask();}@Overridepublic 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() {@Overridepublic void run() {SetLight(BaseActivity.this, 1);}};}

坚守自己的原则,世界上的诱-惑很多,

【Android】实现类似于百度长时间不用APP屏幕变暗

相关文章:

你感兴趣的文章:

标签云: