news 2026/7/26 15:07:25

工控常用系统功能:屏幕亮度控制、休眠关闭、看门狗对接、硬件按键屏蔽

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
工控常用系统功能:屏幕亮度控制、休眠关闭、看门狗对接、硬件按键屏蔽

工控常用系统功能:屏幕亮度控制、休眠关闭、看门狗对接、硬件按键屏蔽

工控安卓和手机安卓最大的区别:一个求着你玩,一个求你别碰。屏幕不能灭、按键不能按、狗不能饿死——今天咱就把这些"反人类"需求一次讲透。


一、屏幕亮度控制

工控设备通常 7x24 无人值守,亮度控制不是为了让用户舒服,而是为了省电 + 延长屏幕寿命 + 夜间降亮避免光污染

1.1 全局亮度调节

通过Settings.System修改系统亮度,需要WRITE_SETTINGS权限:

// 检查是否授权if(!Settings.System.canWrite(context)){Intentintent=newIntent(Settings.ACTION_MANAGE_WRITE_SETTINGS);intent.setData(Uri.parse("package:"+context.getPackageName()));startActivity(intent);}// 设置亮度 (0~255)Settings.System.putInt(getContentResolver(),Settings.System.SCREEN_BRIGHTNESS,128// 半亮);

1.2 仅当前 Activity 亮度

不需要权限,适合局部场景(比如扫码页面拉满亮度):

WindowManager.LayoutParamslp=getWindow().getAttributes();lp.screenBrightness=1.0f;// 0.0~1.0,-1 恢复系统默认getWindow().setAttributes(lp);

注意getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)也能防止屏幕灭,但它并不能调节亮度,只保持亮着。


二、休眠关闭方案

工控场景"不熄屏"是刚需,三种方案各有擅场:

2.1 FLAG_KEEP_SCREEN_ON(最简)

// Activity 中getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);// 或布局中android:keepScreenOn="true"

缺点:仅当前窗口生效,切到后台就失效。

2.2 修改系统休眠时间

// 设为永不休眠(注意会修改全局设置)Settings.System.putInt(getContentResolver(),Settings.System.SCREEN_OFF_TIMEOUT,Integer.MAX_VALUE);

需要WRITE_SETTINGS权限。不建议设为永久——万一面板烧屏得不偿失。

2.3 PowerManager WakeLock(持有唤醒锁)

PowerManagerpm=(PowerManager)getSystemService(POWER_SERVICE);PowerManager.WakeLockwl=pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP,"MyApp::WakeLockTag");wl.acquire(10*60*1000L);// 10分钟自动释放// 别忘了释放wl.release();

需要WAKE_LOCK权限。ACQUIRE_CAUSES_WAKEUP 能在锁屏状态下点亮屏幕。


三、看门狗对接

硬件看门狗是工控设备的"心跳检测器"——App 需要定时往 /dev/watchdog 写数据,超时未写则设备自动重启。

3.1 喂狗原理

publicclassWatchDogFeeder{privatestaticfinalStringWDT_DEVICE="/dev/watchdog";privateScheduledExecutorServiceexecutor;publicvoidstartFeed(){executor=Executors.newSingleThreadScheduledExecutor();executor.scheduleAtFixedRate(()->{try(FileOutputStreamfos=newFileOutputStream(WDT_DEVICE)){fos.write("1".getBytes());fos.flush();}catch(IOExceptione){// 喂狗失败,设备即将重启,快速保存关键数据emergencySaveData();}},0,3,TimeUnit.SECONDS);// 每 3 秒喂一次}}

核心要点:

  • 喂狗间隔 < 看门狗超时时间(一般设为超时时间的 1/2)
  • 用独立线程,不能跟采集逻辑挤同一个线程
  • 喂狗失败意味着设备要重启,必须做最后的应急处理

3.2 软看门狗——没硬件时的替代

// 监控主线程是否卡死newHandler(Looper.getMainLooper()).postDelayed(()->{// 超时未收到心跳 => ANR,主动重启 Appandroid.os.Process.killProcess(android.os.Process.myPid());},5000);

四、硬件按键屏蔽

工控设备的物理按键不能被用户乱按——音量增减重启导航,后果不堪设想。

4.1 Activity 级拦截

@OverridepublicbooleanonKeyDown(intkeyCode,KeyEventevent){switch(keyCode){caseKeyEvent.KEYCODE_VOLUME_UP:caseKeyEvent.KEYCODE_VOLUME_DOWN:caseKeyEvent.KEYCODE_BACK:// 返回键caseKeyEvent.KEYCODE_HOME:// Home键(仅部分系统有效)returntrue;// 吃掉事件,不传递}returnsuper.onKeyDown(keyCode,event);}

局限性:Home 键、Recent 键在大多数系统中 Activity 层级无法拦截,需要系统签名或 framework 修改。

4.2 系统级屏蔽(frameworks/base)

<!-- frameworks/base/core/res/res/values/config.xml --><!-- 禁用导航栏 --><boolname="config_showNavigationBar">false</bool><!-- 禁用状态栏下拉 --><boolname="config_enableStatusBar">false</bool>

或者在framework-res.apk中修改,需要 root 或系统签名。

4.3 沉浸模式(全屏+无状态栏)

// API 19+ViewdecorView=getWindow().getDecorView();intuiOptions=View.SYSTEM_UI_FLAG_HIDE_NAVIGATION|View.SYSTEM_UI_FLAG_FULLSCREEN|View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;decorView.setSystemUiVisibility(uiOptions);

能隐藏导航栏,但物理 Home 键还是拦不住。终极方案是改系统源码去掉导航栏。


五、其他工控常用功能速查

// 设置系统时间(需要系统签名或 root)SystemClock.setCurrentTimeMillis(newTimeMillis);// 静音控制AudioManageram=(AudioManager)getSystemService(AUDIO_SERVICE);am.setStreamVolume(AudioManager.STREAM_MUSIC,0,0);// WiFi 开关(API 29+ 已废弃直接开关,需要引导用户)WifiManagerwm=(WifiManager)getApplicationContext().getSystemService(WIFI_SERVICE);// API 29 以下wm.setWifiEnabled(true);// API 29+ 建议用设置面板startActivity(newIntent(Settings.Panel.ACTION_WIFI));

六、综合实战代码

publicclassIndustrialActivityextendsAppCompatActivity{privatePowerManager.WakeLockwakeLock;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_industrial);// 1. 屏幕常亮 + 全屏getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);hideSystemUI();// 2. 设置亮度WindowManager.LayoutParamslp=getWindow().getAttributes();lp.screenBrightness=0.8f;getWindow().setAttributes(lp);// 3. 启动喂狗startWatchDog();}privatevoidhideSystemUI(){ViewdecorView=getWindow().getDecorView();decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY|View.SYSTEM_UI_FLAG_HIDE_NAVIGATION|View.SYSTEM_UI_FLAG_FULLSCREEN);}@OverridepublicbooleanonKeyDown(intkeyCode,KeyEventevent){// 屏蔽音量键和返回键if(keyCode==KeyEvent.KEYCODE_VOLUME_UP||keyCode==KeyEvent.KEYCODE_VOLUME_DOWN||keyCode==KeyEvent.KEYCODE_BACK){returntrue;}returnsuper.onKeyDown(keyCode,event);}@OverrideprotectedvoidonDestroy(){super.onDestroy();if(wakeLock!=null&&wakeLock.isHeld()){wakeLock.release();}stopWatchDog();}}

七、权限配置清单

<uses-permissionandroid:name="android.permission.WAKE_LOCK"/><uses-permissionandroid:name="android.permission.WRITE_SETTINGS"/><uses-permissionandroid:name="android.permission.DEVICE_POWER"/><uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/>

工控系统的"奇技淫巧"归根结底就是一句话:把 Android 变成一台专用的嵌入式设备。该关的关掉,该锁的锁死,剩下的交给看门狗。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/26 15:05:39

告别手动排版!report包让你的R数据分析报告标准化、高质量

告别手动排版&#xff01;report包让你的R数据分析报告标准化、高质量 【免费下载链接】report :scroll: :tada: Automated reporting of objects in R 项目地址: https://gitcode.com/gh_mirrors/rep/report 在数据分析工作中&#xff0c;撰写报告往往是最耗时的环节之…

作者头像 李华
网站建设 2026/7/26 15:04:45

[MCP][]Sampling示例

MCP Sampling 示例&#xff1a;让 AI 智能体与人类协作采样 引言&#xff1a;什么是 MCP Sampling&#xff1f;想象一下&#xff0c;你正在开发一个智能助手&#xff0c;它需要从海量数据中筛选出最有价值的信息。如果让它自己盲目采样&#xff0c;可能会遗漏重要内容&#xff…

作者头像 李华
网站建设 2026/7/26 15:04:30

Gemini API工程化实践:从调用到集成的技术解析

最近一段时间&#xff0c;AI 领域的竞争格局正在发生一些微妙但重要的变化。当很多人还在关注模型参数规模和单点能力时&#xff0c;一些更底层的趋势已经开始显现。Alphabet 最新发布的 Q2 财报提供了一个观察窗口&#xff1a;营收增长 24%&#xff0c;而 Gemini 月活达到 9.5…

作者头像 李华
网站建设 2026/7/26 15:01:50

终极PDF差异检测工具:diff-pdf视觉对比完整指南

终极PDF差异检测工具&#xff1a;diff-pdf视觉对比完整指南 【免费下载链接】diff-pdf A simple tool for visually comparing two PDF files 项目地址: https://gitcode.com/gh_mirrors/di/diff-pdf diff-pdf是一款基于视觉对比的PDF文件差异检测工具&#xff0c;能够精…

作者头像 李华
网站建设 2026/7/26 15:00:45

TLV5594 FLEX解码器电气特性与接收器控制逻辑深度解析

1. 项目概述&#xff1a;深入理解FLEX解码器的核心在无线通信的世界里&#xff0c;尤其是在寻呼机、低功耗物联网节点这类对功耗和成本极其敏感的设备中&#xff0c;如何可靠地从空中捕获并解析微弱的数字信号&#xff0c;是一门精密的艺术。这不仅仅是软件算法的事&#xff0c…

作者头像 李华
网站建设 2026/7/26 15:00:20

10分钟上手SSSD:快速搭建企业级身份认证服务

10分钟上手SSSD&#xff1a;快速搭建企业级身份认证服务 【免费下载链接】sssd A daemon to manage identity, authentication and authorization for centrally-managed systems. 项目地址: https://gitcode.com/gh_mirrors/ss/sssd SSSD&#xff08;System Security S…

作者头像 李华