android 11反射调用护眼模式/夜间模式

Android 10 推出了 COLOR_DISPLAY_SERVICE 系统服务,具备系统 API 接口,使系统、“设置”和系统界面能够更好地控制所有颜色转换(包括护眼模式)。

首先对应的平板或手机要能支持这个模式
设备制造商可以使用在以下文件中定义的下列标记启用该功能的默认实现
frameworks/base/core/res/res/values/config.xml

 <!-- Control whether Night display is available. This should only be enabled on deviceswith HWC 2.0 or higher. --><bool name="config_nightDisplayAvailable">false</bool>

可以用这个函数来检测是否支持

   /**是否支持夜间模式* 返回true支持,返回不支持*/open fun isNightModeSupport(context: Context): Boolean {val res: Resources = context.resourcesval allowId: Int = res.getIdentifier("config_nightDisplayAvailable", "bool", "android")return res.getBoolean(allowId)}

核心功能由 ColorDisplayManager(由 ColorDisplayService 支持)控制。

系统设置中就有控制“护眼模式”的选项,代码如下:
packages/apps/Settings/src/com/android/settings/display/NightDisplaySettings.java
里面可以看到import android.hardware.display.ColorDisplayManager;
我们可以通过反射得到ColorDisplayManager并进行控制

open fun openOrCloseNightMode(context: Context, open: Boolean) {try {val cl: Class<*> = Class.forName("android.hardware.display.ColorDisplayManager")val control: Any =  context.getSystemService(cl)val md: Method = cl.getDeclaredMethod("setNightDisplayActivated", Boolean::class.javaPrimitiveType)md.invoke(control, open)} catch (e: ClassNotFoundException) {Log.d(TAG, "ClassNotFoundException:" + e.message)} catch (e: NoSuchMethodException) {Log.d(TAG, "NoSuchMethodException:" + e.message)} catch (e: InvocationTargetException) {Log.d(TAG, "InvocationTargetException:" + e.message)} catch (e: IllegalAccessException) {Log.d(TAG, "IllegalAccessException:" + e.message)} catch (e: InstantiationException) {Log.d(TAG, "InstantiationException:" + e.message)}}

注意要加上相应权限,不然执行会报错:“InvocationTargetException:null”
AndroidManifest.xml加上

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

怎么知道要加什么权限呢,除了网上查,另外一种就是看安卓SDK源码,
比如这个功能真正实现的代码在这里
frameworks/base/services/core/java/com/android/server/display/color/ColorDisplayService.java

1655         public boolean mySetNightDisplayActivated(boolean activated) {1656             getContext().enforceCallingOrSelfPermission(
1657                     Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS,
1658                     "Permission required to set night display activated");
1659             final long token = Binder.clearCallingIdentity();
1660             try {1661                 mNightDisplayTintController.setActivated(activated);
1662                 return true;
1663             } finally {1664                 Binder.restoreCallingIdentity(token);
1665             }
1666         }

注意第1657行Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS, 那么转换成应用层要的就是
android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS了。

作者:帅得不敢出门

android反射调用护眼模式相关推荐

  1. android项目小说阅读开发背景颜色,Android 小说阅读护眼模式

    Android 小说阅读护眼模式 实现方案:采用全局dialog 覆盖APP  悬浮在 其他APP之上,给dialog设置护眼色值 自定义护眼模式dialog public class EyeProt ...

  2. Android 小说阅读护眼模式

    Android 小说阅读护眼模式 实现方案:采用全局dialog 覆盖APP  悬浮在 其他APP之上,给dialog设置护眼色值 自定义护眼模式dialog public class EyeProt ...

  3. android护眼程序原理,Android 护眼模式的实现

    思路:获取content根布局,在上面添加一层浮层,默认透明,开启护眼模式设置护眼色值. 实现:在BaseActivity的onCreate方法中,添加浮层,所有的Activity继承BaseActi ...

  4. Flutter实现Android护眼模式

    有一个奇葩的需求,甲方需要实现Android端护眼需求.查找了一番,发现护眼模式是某些厂商的,某些机型有提供.而且没有对外提供Api调用.于是思索一番,决定自己通过插件方式,使用原生方法实现. 先上效 ...

  5. Android 10.0 开启和关闭护眼模式

    1.概述 在10.0系统的产品定制化中,由于一些定制化开发设备中,需要护眼模式,而护眼模式功能开启和关闭 也需要提供接口供app调用,这就需要在系统api中自定义的服务中,提供开启关闭护眼模式的接口, ...

  6. Android护眼模式(argb)

    前提:护眼模式可以说是加一层某颜色且透明度小于1的view,现在网络上比较流行的护眼色博主比较喜欢以下两种. rgb值如下 第一种:r=199, g=237, b=204: 第一种:r=129, g= ...

  7. Android护眼模式功能小记

    最近自己在做一个小说阅读器,看到某阅有护眼模式功能,别人都有,我怎么能没有? 现在这功能已经不稀奇了,很多手机都带有这个功能. 实现起来不难,用一个蒙版遮在界面上面就行. 至于蒙版,可以用Window ...

  8. android 护眼模式设置参数,节能护眼看这里!玩转Android手机的显示设置

    原标题:节能护眼看这里!玩转Android手机的显示设置 对智能手机而言,除了性能以外,其屏幕的显示效果和续航时间对体验的影响往往更加直观.在系统设置的"显示"功能列表中,我们就能 ...

  9. Android 实现护眼模式

    一.背景 在阅读软件或者儿童软件都需要护眼模式来降低蓝光的辐射. 二.实现方案 首先在每个activity创建的时候在最上层添加一层view,去掉点击事件. 用sp或者mmkv来存储当前是否打开护眼模 ...

最新文章

  1. CBWFQ技术简介及应用配置事例
  2. 手把手玩转win8开发系列课程(18)
  3. generate random or regular test data in R
  4. 如何在SAP云平台上启用SAP Intelligent Robotic Process Automation - IRPA
  5. require.js学习记录
  6. 批准Oracle IDM中的特定Web服务
  7. JS - Object.create(prototype)方法
  8. edge浏览器如何把网页放到桌面_电脑如何添加便签,便签怎么放到桌面上
  9. java base64 转图片不现实_Base64.decodeBase64将base64转图片的问题
  10. PHP一维数组转二维数组正则表达式
  11. 2019淘宝最新类目清单免费提供欢迎点赞
  12. TM/QQ默认表情全部丢失的解决办法
  13. SQL server 数据迁移到mysql
  14. CI管道-Github+ACR
  15. CalBioreagents丨艾美捷丨ACTH N端单克隆抗体
  16. CCF-CSP 201612-1 中间数
  17. 贪婪洞窟2一直显示连接服务器失败,《贪婪洞窟2》登陆失败解决方法 进不去怎么解决...
  18. 谣言检测论文精读——11.PAKDD2020-SAFE: Similarity-Aware Multi-Modal Fake News Detection
  19. IPLC专线使用心得,速度惊人!
  20. 如何构建企业数据资产运营体系

热门文章

  1. FFmpeg简介,下载
  2. Box2d 物理引擎
  3. 手机IMEI是什么?有什么作用?如何检查它?
  4. 自适应log file sync影响案例
  5. 亚马逊:从一无是处到无与伦比
  6. 友盟社会化分享之自定义内容分享到微信,微博,豆瓣
  7. c#背单词小程序视频_C#用timer实现背单词小程序(B版)
  8. html5圆形图片自动旋转,HTML5/Canvas 彩虹小方块圆盘旋转
  9. 数控机床刀具挑选和切削用量确认的准则!
  10. 【C++ 程序】 sin(x)的泰勒展开