【Android】实现类似于百度长时间不用APP屏幕变暗——不用修改系统设置权限

1原理:

这个原理很简单,相信大家都比较熟悉安卓的图形渲染过程,所以就不介绍了,大概原理就是修改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;

	@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);
		}
	};

}
时间: 2024-08-02 20:44:06

【Android】实现类似于百度长时间不用APP屏幕变暗——不用修改系统设置权限的相关文章

phpmyadmin 长时间登陆不过期

一个小技巧:  在项目开发过程中,经常使用phpmyadmin,默认情况下,一段时间不操作,就需要重新登陆,如果要长时间使用,操作如下:    修改config.inc.php中的$cfg['Servers'][$i]['auth_type'] = 'cookie';为http这样只要不关闭浏览器,都会有效. 还有一种方法是 不改变 auth_type  修改\libraries\config.default.php中LoginCookieValidity值调大一些.

屏蔽电信流氓广告造成的诡异的问题--Android WebView 长时间不能加载页面

发现在家里的时候用Android App里的WebView打开网站很慢,会有十几秒甚至更长时间的卡住. 但是在电脑上打开同样的网页却很快. 查找这个问题的过程比较曲折,记录下来. 抓取Android网络数据 为了调试这个问题,首先要抓取Android的网络包数据.开始时,是想用Wireshark来抓包的,但是很麻烦,tcpdump在手机要root权限. 于是转换思路,能不能在Android上设置代理,来抓包? 但是fiddler没有linux版本,于是转用BurpSuite了. 设置Androi

Windows下Android Studio长时间停留在Building "Project Name" Gradle project info画面的解决方法

问题描述: 创建好一个Android项目后,Android Studio长时间停留在Building [Project Name] Gradle project info画面不动. 原因: 此时Android Studio在下载gradle-X.XX-all.zip文件,但是下载过程中经常中断,导致重来(不支持断点续传?). 解决办法: 1. 首先查看gradle版本,路径:C:\Users\[用户名]\.gradle\wrapper\dists\gradle-X.XX-all 2. 然后去Gr

app开发周期一般多长时间?【专业分析】

在外包app之前,很多朋友会问做一款app大概需要花费多长时间,但这个问题实际上是没有标准答案的.因为每款app的功能需求都不一样,而功能需求是决定app外包开发时间的最重要因素,功能越简单越少,开发时间自然就短.所以想要知道app开发周期一般多长时间,首先要明确你的功能需求才能够进一步判断,然而这个周期我们是没法改变的.当然除了app本身的功能需求之外还有一些人为的主观因素可能会影响到app的外包时长,今天我们就来谈谈这个. 第一,App开发进度表 项目开始前一定要求乙方(app开发商)提供开

【智能手环APP for Android 】01 百度地图展示行动轨迹

1.效果图示 2.行动轨迹数据 <span style="font-size:18px;">[ { "LocationX":"121.42619", "LocationY":"31.186655" }, { "LocationX":"121.42694", "LocationY":"31.187215" }, { &

Android性能优化系列---管理你的app内存

 文章出处:http://developer.android.com/training/articles/memory.html#YourApp Random-access memory(RAM)在任何软件开发环境都是稀有资源,在移动操作系统物理内存有限的情况下将显得更加珍贵.虽然Android的Dalvik虚拟机优化了内存回收机制,但我们也要关注你的app的内存分配合和释放 为了垃圾回收器能回收你系统的内存,你应该避免引起内存泄露(通常由全局成员hold了对象引用),而且要在合适的时间点(如生

android产品研发(十四)--&gt;App升级与更新

转载请标明出处:一片枫叶的专栏 上一篇文章中我们讲解了android app中的轮训操作,讲解的内容主要包括:我们在App中使用轮训操作的情景,作用以及实现方式等.一般而言我们使用轮训操作都是通过定时任务的形式请求服务器并更新用户界面,轮训操作都有一定的使用生命周期,即在一定的页面中启动轮操作,然后在特定的情况下关闭轮训操作,这点需要我们尤为注意,我们还介绍了使用Timer和Handler实现轮训操作的实例,更多关于App中轮训操作的信息,可参考我的:android产品研发(十三)–>App轮训

Android Developer:构建超过65K方法的App

Android App的大小随着Android平台持续增长.当你的应用程序和它引用的库达到某个大小,你会遇见预示你的App已经达到Android应用构建架构极限的构建错误.早期版本的构建系统报告如下错误: Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536 最近版本的Android构建系统显示一个不同的错误,他指示这同样的问题: trouble writing

【Android开发】找乐,一个笑话App的制作过程记录

缘起 想做一个笑话App的原因是由于在知乎上看过一个帖子.做Android能够有哪些数据能够练手,里面推荐了几个数据开放平台. 在这些平台中无一不是有公共的笑话接口,当时心想这个能够拿来练手啊,还挺有意思的,预计还能积累一点用户. 碰巧(真的好巧)在Github中遇到了一个MVP设计模式的框架Beam,作者Jude95有一个笑话仓库----Joy(豆逼).就是一个做笑话的! 更巧的是用到的接口也是我在关注的接口.心想不如改造一下吧,做个升级版.自己也能够在这个中学到别人是怎么写App的. 后来发