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

先上效果图:

主要实现步骤。

1、Android层定义注册插件、监听插件方法调用(在configureFlutterEngine中注册监听)。

//注册插件
GeneratedPluginRegistrant.registerWith(flutterEngine)val nativeChannel = MethodChannel(flutterEngine!!.dartExecutor.binaryMessenger, CHANNEL_NATIVE)
nativeChannel.setMethodCallHandler(MethodChannel.MethodCallHandler { methodCall, result ->when (methodCall.method) {"platformOpenEyeCare" -> {if (methodCall.arguments != null) {Toast.makeText(this,"调用",Toast.LENGTH_SHORT).show()} else {}//执行方法操作openEyeCareMode()result.success("Activity -> Flutter 接收回调的返回值成功")}else -> result.notImplemented()}
})

2、实现护眼原理,就是通过添加悬浮窗、然后过滤蓝光。

/*** 过滤蓝光** @param blueFilterPercent 蓝光过滤比例[10-80]*/public static @ColorIntint getColor(int blueFilterPercent) {int realFilter = blueFilterPercent;if (realFilter < 10) {realFilter = 10;} else if (realFilter > 80) {realFilter = 80;}int a = (int) (realFilter / 80f * 180);int r = (int) (200 - (realFilter / 80f) * 190);int g = (int) (180 - (realFilter / 80f) * 170);int b = (int) (60 - realFilter / 80f * 60);return Color.argb(a, r, g, b);}

3、悬浮窗的开启,通过Service里面处理。这样可以保持应用存在时候长期有效、核心代码如下。

windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManagerval params = WindowManager.LayoutParams().apply {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {this.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY orWindowManager.LayoutParams.TYPE_STATUS_BAR} else {this.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY}this.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL orWindowManager.LayoutParams.FLAG_NOT_TOUCHABLE orWindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS orWindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN orWindowManager.LayoutParams.FLAG_NOT_FOCUSABLEthis.format = PixelFormat.TRANSLUCENT}windowManager.defaultDisplay.apply {params.gravity = Gravity.START or Gravity.TOPval point = Point()this.getRealSize(point)//params.width = point.x 在华为某些新机型横屏全屏时失效,//只覆盖一半,所以增加遮罩层大小,把宽度也设置为yparams.width = point.yparams.height = point.y}coverLayout = FrameLayout(this)coverLayout.setBackgroundColor(Utils.getColor(30))windowManager.addView(coverLayout, params)

4、在AndroidManifest文件里面注册刚才写的Service。

<service android:name=".EyeCareService"/>

5、flutter层调用。

//获取通道对象
const demoPlugin = const MethodChannel('flutter_plugin_eye');
//调用底层方法,设置护眼模式
demoPlugin.invokeMethod('platformOpenEyeCare');

代码下载,获取码: sv3r

Flutter实现Android护眼模式相关推荐

  1. Android护眼模式功能小记

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

  2. Android护眼模式、屏幕亮度调节功能开发【基于Android8.0】

    Android护眼模式.屏幕亮度调节功能开发[基于Android8.0] [引言]网上关于写护眼模式,屏幕亮度调节的android的方法很少,找到的都不能很好的适配Android8.0的版本.于是自己 ...

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

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

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

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

  5. Android护眼模式(argb)

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

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

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

  7. Android 小说阅读护眼模式

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

  8. android反射调用护眼模式

    android 11反射调用护眼模式/夜间模式 Android 10 推出了 COLOR_DISPLAY_SERVICE 系统服务,具备系统 API 接口,使系统."设置"和系统界 ...

  9. Android 实现护眼模式

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

最新文章

  1. 添加service到SystemService硬件服务
  2. IE6/7/8/9中Table/Select的innerHTML不能赋值
  3. 服务器返回的信息无效或无法识别的响应,c# - 服务器从Visual Studio返回了无效或无法识别的响应错误 - 堆栈内存溢出...
  4. excel 树结构json_写一个上传excel表格,解析成 json 的接口
  5. 彩信的基本原理(转贴)
  6. 按窗口文件php代码,在Windows命令行窗口中输入并运行PHP代码片段(不需要php文件)的方法...
  7. 【分享创造】react-typewriter-hook: 用react hooks来实现打字机的效果
  8. 【特色团队采访】慌呀哩团队,用简洁算法达成高效协作
  9. 中国电信物联网开放平台对接历程
  10. 【Base64是什么?】
  11. ElasticSearch简单使用
  12. Qt实现在QLabel上显示图片并进行线条/矩形框/多边形的绘制
  13. python对于字典d d.get(x、y)_python--字典
  14. 【CEPH-初识篇】ceph详细介绍+“ 一 ” 篇解决ceph集群搭建, “ 三 ” 大(对象、块、文件)存储使用
  15. 云原生大爆发,Day2运营与K8s集群生命周期的交织
  16. TP屏幕适配--驱动篇
  17. 获取ios 设备的设备标识
  18. ssd202和nuc972开发笔记:基于nuc972和ssd202的空调控制器-远程控制空调(动力环境监控)
  19. 计算机怎么设置内存数据恢复,最新手机内存数据恢复方法【详细介绍】
  20. 【python 初学者】使用matplotlib画对比旋风图

热门文章

  1. 网络安全----1.网络安全概述
  2. MongoDB添加索引
  3. Android开机键失灵启动手机的解决办法
  4. KCon 2019兵器谱正式招募 免费邀约安全神兵利器
  5. 挑战空中加油——1号店B2C电商系统演进之路
  6. “中兴坠楼”事件冷思考:AI带来的失业潮,我们该何去何从?
  7. 自动计算器c语言,C语言实现计算器
  8. 国企央企OFFER收割全攻略 | 银行篇之笔试
  9. NPS配置---从腾讯云服务器配置到客户端、服务器及管理页面
  10. 单绞机张力开环控制(绞臂行星差速机构算法)