问题场景
在开发过程中,由于需求上要求在自动使用中不可以进入休眠,本来系统在开发中已经设置了永不休眠权限,但是在后续使用过程中发现永不休眠变为了30s,由于本人不涉及系统层面,所以考虑在Android应用层对永不休眠进行重设置
解决方案
1.adb指令
通过网络查找发现adb指令中可以进行控制
settings put system screen_off_timeout 0
通过给设备root,已经释放权限,Android5.0上可以之间模拟cmd,进行指令的下发,进而修改永不休眠
runCmd('settings put system screen_off_timeout 0');
public void runCmd(String com) {
Process suProcess=null;
DataOutputStream os =null ;
Log.d("TAG", "cmd -- :" + com);
try {
suProcess = Runtime.getRuntime().exec("su");//root权限
os = new DataOutputStream(suProcess.getOutputStream());
os.writeBytes(com + "\n");
os.flush();
os.close();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
但是,在Android9.0版本开发时,由于权限控制比较严格,导致上述方式已经不能实现功能
2.Settings.system处理
通过对adb指令的分析以及网上查询,发现在设备端实际上可以直接对设备的某些属性进行读写,其中就包括屏幕休眠时间
//获取屏幕休眠时间 1是参数而已
long defTimeOut = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, 1)
//设置屏幕休眠时间 0代表永不休眠
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, 0);
根据上述代码使用后,设备就可以正常读取和设置屏幕休眠时间,且在Android5.0及9.0都可以使用 同时通过对该参数的查询,发现更多可设置参数,相关链接: android setting之Settings.system设置.
总结
对屏幕休眠时间可进行代码端直接修改,对其他参数也可进行借鉴设置,避免系统未设置导致无法处理的问题
|