失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Android 修改系统屏幕亮度

Android 修改系统屏幕亮度

时间:2019-05-15 20:29:04

相关推荐

Android 修改系统屏幕亮度

[toc]

Android系统的亮度值取值范围在0~255,数据类型是int型.

下面分两步介绍:

介绍关于系统亮度的一些常用的方法结合一个案例说说

一.系统亮度常用的方法

1. 获得当前屏幕亮度的模式

/** 2. SCREEN_BRIGHTNESS_MODE_AUTOMATIC=1 为自动调节屏幕亮度 3. SCREEN_BRIGHTNESS_MODE_MANUAL=0 为手动调节屏幕亮度 */ private int getScreenMode(){ int screenMode=0; try{ screenMode =Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE); } catch (Exception localException){ } return screenMode; }

2.获取当前屏幕亮度值0—255

/** * 获得当前屏幕亮度值 0--255 */ private int getScreenBrightness(){ int screenBrightness=255; try{ screenBrightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS); } catch (Exception localException){ } return screenBrightness; }

3.设置当前屏幕亮度的模式

/** * 设置当前屏幕亮度的模式* SCREEN_BRIGHTNESS_MODE_AUTOMATIC=1 为自动调节屏幕亮度 * SCREEN_BRIGHTNESS_MODE_MANUAL=0 为手动调节屏幕亮度 */ private void setScreenMode(int paramInt){ try{ Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, paramInt); }catch (Exception localException){ localException.printStackTrace(); } }

4.设置当前屏幕亮度值0–255

/** * 设置当前屏幕亮度值 0--255 */ private void saveScreenBrightness(int paramInt){ try{ Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, paramInt); } catch (Exception localException){ localException.printStackTrace(); } }

5.保存当前的屏幕亮度值,并使之生效

/** * 保存当前的屏幕亮度值,并使之生效 */ private void setScreenBrightness(int paramInt){ Window localWindow = getWindow(); WindowManager.LayoutParams localLayoutParams = localWindow.getAttributes(); float f = paramInt / 255.0F; localLayoutParams.screenBrightness = f; localWindow.setAttributes(localLayoutParams); }

二.案例分析

1.在布局文件中用了一个seekbar控制屏幕的亮度

<SeekBar android:id="@+id/sb"android:layout_width="match_parent"android:layout_height="wrap_content"/>

2.在清单文件中添加权限,这里有个坑

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_SETTINGS"/>

聪明的你会发现这里有两个用户权限。一个是sdk写入权限,一个是修改系统设置权限这是一个特殊的权限。

在android 6.0及以后,WRITE_SETTINGS权限的保护等级已经由原来的dangerous升级为signature,这意味着我们的APP需要用系统签名或者成为系统预装软件才能够申请此权限,并且还需要提示用户跳转到修改系统的设置界面去授予此权限。

很多大神已经给出了答案:

//申请android.permission.WRITE_SETTINGS权限的方式if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//如果当前平台版本大于23平台if (!Settings.System.canWrite(this)) {//如果没有修改系统的权限这请求修改系统的权限Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);intent.setData(Uri.parse("package:" + getPackageName()));intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivityForResult(intent, 0);} else {//有了权限,你要做什么呢?具体的动作}}

安装demo的时候会进入如下界面:只有我们允许了,才能对系统的屏幕亮度进行修改。

android6.0以后很多权限需要动态申请,以下是我这个项目中动态申请权限的一个方法:

这是一个大神封装好的关于动态申请权限。用起来非常简单:

大神的传送门:/#/

这里就不多介绍了,代码如下:

//动态申请权限// 先判断是否有权限。if (AndPermission.hasPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {// 有权限,直接do anything.processShow();} else {// 申请权限。链式调用非常简单AndPermission.with(this).requestCode(100).permission(Manifest.permission.WRITE_EXTERNAL_STORAGE).send();}//权限请求的回调@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,@NonNull int[] grantResults) {AndPermission.onRequestPermissionsResult(requestCode, permissions, grantResults, listener);}private PermissionListener listener = new PermissionListener() {@Overridepublic void onSucceed(int requestCode, List<String> grantPermissions) {//权限申请成功回调if (requestCode == 100) {//在这个方法里面去processShow();} else if (requestCode == 101) {Toast.makeText(MainActivity.this, "权限申请失败", Toast.LENGTH_SHORT).show();}}@Overridepublic void onFailed(int requestCode, List<String> deniedPermissions) {//权限申请失败的回调if (AndPermission.hasAlwaysDeniedPermission(MainActivity.this, deniedPermissions)) {//第一种默认的提示语,会弹出一个对话框AndPermission.defaultSettingDialog(MainActivity.this, requestCode).show();}}};/*** 对seekBar进行监听*/private void processShow() {sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {//设置屏幕的亮度setScreenBrightness(seekBar.getProgress());}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}});}/*** 设置屏幕的亮度*/private void setScreenBrightness(int process) {//设置当前窗口的亮度值.这种方法需要权限android.permission.WRITE_EXTERNAL_STORAGEWindowManager.LayoutParams localLayoutParams = getWindow().getAttributes();float f = process / 255.0F;localLayoutParams.screenBrightness = f;getWindow().setAttributes(localLayoutParams);//修改系统的亮度值,以至于退出应用程序亮度保持saveBrightness(getContentResolver(),process);}public static void saveBrightness(ContentResolver resolver, int brightness) {//改变系统的亮度值//这里需要权限android.permission.WRITE_SETTINGS//设置为手动调节模式Settings.System.putInt(resolver, Settings.System.SCREEN_BRIGHTNESS_MODE,Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);//保存到系统中Uri uri = android.provider.Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS);android.provider.Settings.System.putInt(resolver, Settings.System.SCREEN_BRIGHTNESS, brightness);resolver.notifyChange(uri, null);}

案例Demo下载

如果觉得《Android 修改系统屏幕亮度》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。