Flutter实现Android护眼模式
有一个奇葩的需求,甲方需要实现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护眼模式相关推荐
- Android护眼模式功能小记
最近自己在做一个小说阅读器,看到某阅有护眼模式功能,别人都有,我怎么能没有? 现在这功能已经不稀奇了,很多手机都带有这个功能. 实现起来不难,用一个蒙版遮在界面上面就行. 至于蒙版,可以用Window ...
- Android护眼模式、屏幕亮度调节功能开发【基于Android8.0】
Android护眼模式.屏幕亮度调节功能开发[基于Android8.0] [引言]网上关于写护眼模式,屏幕亮度调节的android的方法很少,找到的都不能很好的适配Android8.0的版本.于是自己 ...
- android 护眼模式设置参数,节能护眼看这里!玩转Android手机的显示设置
原标题:节能护眼看这里!玩转Android手机的显示设置 对智能手机而言,除了性能以外,其屏幕的显示效果和续航时间对体验的影响往往更加直观.在系统设置的"显示"功能列表中,我们就能 ...
- android护眼程序原理,Android 护眼模式的实现
思路:获取content根布局,在上面添加一层浮层,默认透明,开启护眼模式设置护眼色值. 实现:在BaseActivity的onCreate方法中,添加浮层,所有的Activity继承BaseActi ...
- Android护眼模式(argb)
前提:护眼模式可以说是加一层某颜色且透明度小于1的view,现在网络上比较流行的护眼色博主比较喜欢以下两种. rgb值如下 第一种:r=199, g=237, b=204: 第一种:r=129, g= ...
- android项目小说阅读开发背景颜色,Android 小说阅读护眼模式
Android 小说阅读护眼模式 实现方案:采用全局dialog 覆盖APP 悬浮在 其他APP之上,给dialog设置护眼色值 自定义护眼模式dialog public class EyeProt ...
- Android 小说阅读护眼模式
Android 小说阅读护眼模式 实现方案:采用全局dialog 覆盖APP 悬浮在 其他APP之上,给dialog设置护眼色值 自定义护眼模式dialog public class EyeProt ...
- android反射调用护眼模式
android 11反射调用护眼模式/夜间模式 Android 10 推出了 COLOR_DISPLAY_SERVICE 系统服务,具备系统 API 接口,使系统."设置"和系统界 ...
- Android 实现护眼模式
一.背景 在阅读软件或者儿童软件都需要护眼模式来降低蓝光的辐射. 二.实现方案 首先在每个activity创建的时候在最上层添加一层view,去掉点击事件. 用sp或者mmkv来存储当前是否打开护眼模 ...
最新文章
- 添加service到SystemService硬件服务
- IE6/7/8/9中Table/Select的innerHTML不能赋值
- 服务器返回的信息无效或无法识别的响应,c# - 服务器从Visual Studio返回了无效或无法识别的响应错误 - 堆栈内存溢出...
- excel 树结构json_写一个上传excel表格,解析成 json 的接口
- 彩信的基本原理(转贴)
- 按窗口文件php代码,在Windows命令行窗口中输入并运行PHP代码片段(不需要php文件)的方法...
- 【分享创造】react-typewriter-hook: 用react hooks来实现打字机的效果
- 【特色团队采访】慌呀哩团队,用简洁算法达成高效协作
- 中国电信物联网开放平台对接历程
- 【Base64是什么?】
- ElasticSearch简单使用
- Qt实现在QLabel上显示图片并进行线条/矩形框/多边形的绘制
- python对于字典d d.get(x、y)_python--字典
- 【CEPH-初识篇】ceph详细介绍+“ 一 ” 篇解决ceph集群搭建, “ 三 ” 大(对象、块、文件)存储使用
- 云原生大爆发,Day2运营与K8s集群生命周期的交织
- TP屏幕适配--驱动篇
- 获取ios 设备的设备标识
- ssd202和nuc972开发笔记:基于nuc972和ssd202的空调控制器-远程控制空调(动力环境监控)
- 计算机怎么设置内存数据恢复,最新手机内存数据恢复方法【详细介绍】
- 【python 初学者】使用matplotlib画对比旋风图