以编程方式启用/禁用Android设备上的辅助function设置

如何以编程方式启用/禁用诸如TalkBack之类的Android屏幕阅读器服务?

我正在开发一个自助服务终端types的应用程序,它将安装在Android设备上,当他们访问特定的博物馆时将被借给访问者。 (我们仍然在确定我们将使用什么设备。)计划是仅允许用户使用我们的应用程序而无法访问Android设置应用程序。 但是,我们希望允许用户配置一些辅助function设置。 完成设备后,我们需要将所有设置恢复为默认设置。

以下链接中的讨论有很多建议启动Android的设置应用。 但我们不希望用户访问许多其他设置。

如何以编程方式启用/禁用Android中的辅助function服务

    只有系统应用程序才能以编程方式启用/禁用辅助function服务。 系统应用程序可以直接写入设置安全数据库以启动辅助function服务。

    Settings.Secure.putString(getContentResolver(),Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, "com.packagename/com.packagename.componentname"); 

    在设置安全db中写入以下权限:

      

    对于非系统应用程序,只有启动辅助function服务的方法是通过意图将它们指向辅助function设置屏幕,并让用户手动启动服务:

     Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS); 

    如果您将应用程序设置为AccessibilityService ,我认为可能有一种方法可以做到这一点(但您必须在安装后手动启用它)。

    然后在您的AccessibilityService类中,在onAccessibilityEvent方法中,您可以浏览视图(递归)并执行点击 – 在下面的示例中,它将单击设置中的TalkBack项目 – 之后它应该在下一个屏幕上切换切换按钮(诀窍是你可以点击父级而不是交换机视图本身) – 我还没试过这段代码:)

     @Override public void onAccessibilityEvent(AccessibilityEvent event) { AccessibilityNodeInfo source = event.getSource(); if(event.getEventType()==AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) explore(source); } private void explore(AccessibilityNodeInfo view){ int count = view.getChildCount(); for(int i=0; i 

    所以现在如果你用Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);打开辅助function设置Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS); 它将为您执行点击 - 您必须以某种方式用全屏吐司或视图服务来覆盖它

    我目前正在进行自动飞机模式切换并且它可以工作 - 所以应该在你的情况下完成工作

    看看我的serviceconfig.xml

      

    从棒棒糖中,您无法更改违反安全策略的所有设置。 你可以访问其中一些,但你必须获得许可。 所以请不要浪费时间。