Android中如何通过编程从Service启用/禁用设备全局竖屏模式
全局设备竖屏模式控制实现方案
必要前提
- 首先需要申请特殊权限
android.permission.WRITE_SETTINGS,普通动态权限申请无法生效,需要引导用户前往系统设置页开启「修改系统设置」权限 - Android 10及以上版本如果Service在后台运行,还需要申请
android.permission.SYSTEM_ALERT_WINDOW悬浮窗权限,避免后台操作被系统拦截
核心实现代码
你提到的setRequestedOrientation方法只能控制当前应用单个Activity的显示方向,要实现全局设备方向控制,需要直接修改系统的屏幕方向配置项:
- 启用全局竖屏锁定
// 关闭系统自动旋转功能 Settings.System.putInt(getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 0); // 设置全局默认方向为竖屏 Settings.System.putInt(getContentResolver(), Settings.System.USER_ROTATION, Surface.ROTATION_0);
- 解除全局竖屏锁定,恢复系统默认旋转逻辑
// 开启系统自动旋转功能 Settings.System.putInt(getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, 1);
注意事项
- 该方案修改的是系统全局的显示配置,修改后所有应用都会遵循该设置,完全符合全局控制的需求
- 在Service中调用时直接使用
service.getContentResolver()获取ContentResolver实例即可 - 权限申请参考代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (!Settings.System.canWrite(context)) { Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS); intent.setData(Uri.parse("package:" + context.getPackageName())); context.startActivity(intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); } }
内容的提问来源于stack exchange,提问作者Maisam Haider
相关产品推荐
相关产品推荐

