工控常用系统功能屏幕亮度控制、休眠关闭、看门狗对接、硬件按键屏蔽工控安卓和手机安卓最大的区别一个求着你玩一个求你别碰。屏幕不能灭、按键不能按、狗不能饿死——今天咱就把这些反人类需求一次讲透。一、屏幕亮度控制工控设备通常 7x24 无人值守亮度控制不是为了让用户舒服而是为了省电 延长屏幕寿命 夜间降亮避免光污染。1.1 全局亮度调节通过Settings.System修改系统亮度需要WRITE_SETTINGS权限// 检查是否授权if(!Settings.System.canWrite(context)){IntentintentnewIntent(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.LayoutParamslpgetWindow().getAttributes();lp.screenBrightness1.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:keepScreenOntrue缺点仅当前窗口生效切到后台就失效。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.WakeLockwlpm.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(){executorExecutors.newSingleThreadScheduledExecutor();executor.scheduleAtFixedRate(()-{try(FileOutputStreamfosnewFileOutputStream(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 --!-- 禁用导航栏 --boolnameconfig_showNavigationBarfalse/bool!-- 禁用状态栏下拉 --boolnameconfig_enableStatusBarfalse/bool或者在framework-res.apk中修改需要 root 或系统签名。4.3 沉浸模式全屏无状态栏// API 19ViewdecorViewgetWindow().getDecorView();intuiOptionsView.SYSTEM_UI_FLAG_HIDE_NAVIGATION|View.SYSTEM_UI_FLAG_FULLSCREEN|View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;decorView.setSystemUiVisibility(uiOptions);能隐藏导航栏但物理 Home 键还是拦不住。终极方案是改系统源码去掉导航栏。五、其他工控常用功能速查// 设置系统时间需要系统签名或 rootSystemClock.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.LayoutParamslpgetWindow().getAttributes();lp.screenBrightness0.8f;getWindow().setAttributes(lp);// 3. 启动喂狗startWatchDog();}privatevoidhideSystemUI(){ViewdecorViewgetWindow().getDecorView();decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY|View.SYSTEM_UI_FLAG_HIDE_NAVIGATION|View.SYSTEM_UI_FLAG_FULLSCREEN);}OverridepublicbooleanonKeyDown(intkeyCode,KeyEventevent){// 屏蔽音量键和返回键if(keyCodeKeyEvent.KEYCODE_VOLUME_UP||keyCodeKeyEvent.KEYCODE_VOLUME_DOWN||keyCodeKeyEvent.KEYCODE_BACK){returntrue;}returnsuper.onKeyDown(keyCode,event);}OverrideprotectedvoidonDestroy(){super.onDestroy();if(wakeLock!nullwakeLock.isHeld()){wakeLock.release();}stopWatchDog();}}七、权限配置清单uses-permissionandroid:nameandroid.permission.WAKE_LOCK/uses-permissionandroid:nameandroid.permission.WRITE_SETTINGS/uses-permissionandroid:nameandroid.permission.DEVICE_POWER/uses-permissionandroid:nameandroid.permission.CHANGE_WIFI_STATE/工控系统的奇技淫巧归根结底就是一句话把 Android 变成一台专用的嵌入式设备。该关的关掉该锁的锁死剩下的交给看门狗。