我正在尝试检查
Remove animations
辅助功能设置的状态,以便在我的应用程序上启用/禁用某些 UI 和 GIF 动画,但我在 AccessibilityManager
中没有看到任何公开的方法来访问此值:
有什么简单的方法可以获取这个值吗?即使有反思
我已经检查过,当切换此值时,会修改 3 个值:
//global settings
animator_duration_scale=0
transition_animation_scale=0
window_animation_scale=0
您可以通过检查以编程方式确定这些:
if (Settings.Global.getFloat(context.contentResolver, Settings.Global.ANIMATOR_DURATION_SCALE, 1.0f) == 0f)
// Animations Off behaviour
else
// Animations On behaviour
我做了一个方法来检查所有三个都不为0(因为所有3个都会对齐,而且我认为这些有时可以在其他地方切换):
fun animationsEnabled(): Boolean =
!(Settings.Global.getFloat(contentResolver, Settings.Global.ANIMATOR_DURATION_SCALE, 1.0f) == 0f
&& Settings.Global.getFloat(contentResolver, Settings.Global.TRANSITION_ANIMATION_SCALE, 1.0f) == 0f
&& Settings.Global.getFloat(contentResolver, Settings.Global.WINDOW_ANIMATION_SCALE, 1.0f) == 0f)
记住这些是缩放数字,所以它们不仅仅是 0 和 1!这就是为什么我们需要获取它们的浮点值,也是为什么我们检查 0。然后我们需要记住,如果动画关闭,它们将全部设置为 0。
来源:
关于 quintin-balsdon 提供的上述解决方案的一点说明: 使用采用默认值的
Settings.Global.getFloat
版本很重要,因为看起来(至少在模拟器上)如果在给定设备上从未打开过“删除动画”,那么(至少)的设置键 Settings.Global.ANIMATOR_DURATION_SCALE
将不存在,并且此代码将导致异常。
因此我建议:
fun Context.animationsEnabled(): Boolean =
!(Settings.Global.getFloat(contentResolver, Settings.Global.ANIMATOR_DURATION_SCALE, 1.0f) == 0f
&& Settings.Global.getFloat(contentResolver, Settings.Global.TRANSITION_ANIMATION_SCALE, 1.0f) == 0f
&& Settings.Global.getFloat(contentResolver, Settings.Global.WINDOW_ANIMATION_SCALE, 1.0f) == 0f)