Android:能否从导航栏及所有快捷方式检测放大辅助功能?
先明确两个核心状态:系统是否开启了屏幕放大功能(允许通过手势/快捷方式触发),以及当前屏幕是否处于放大状态。
关于功能启用状态:你使用的
Settings.Secure.getInt(getAppContext()?.getContentResolver(), "accessibility_display_magnification_enabled",0)确实是对应系统全局开关的设置项,但返回值始终为0大概率是权限问题——读取该系统设置需要android.permission.READ_SECURE_SETTINGS权限,普通应用无法直接申请该权限,要么为应用添加系统签名,要么通过ADB命令手动授予权限。此外,部分厂商定制的Android系统可能修改了该设置项的命名或路径,也会导致读取失败。关于当前放大状态:如果要检测用户通过导航栏快捷按钮、手势等方式激活的临时屏幕放大状态,仅读取Settings值是行不通的——很多临时激活场景不会修改
accessibility_display_magnification_enabled的数值。可以尝试通过DisplayManager获取显示密度的差异来判断:
val displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager for (display in displayManager.displays) { val metrics = DisplayMetrics() display.getRealMetrics(metrics) // 对比逻辑密度与缩放后密度,差值超过阈值说明当前处于屏幕放大状态 if (kotlin.math.abs(metrics.scaledDensity - metrics.density) > 0.1) { // 屏幕处于放大状态 } }
至于你尝试的Settings.Secure.getInt(getAppContext()?.getContentResolver(), "accessibility_display_magnification_scale",0),该设置项用于存储用户自定义的默认放大比例,默认值即为0,只有当用户手动调整过放大比例后才会返回非0值,因此你拿到0是正常情况。
内容的提问来源于stack exchange,提问作者Ashir Kulshreshtha

