Android 无障碍服务设置

项目中遇到需要将客户的无障碍服务设置为默认开启,无障碍服务,是可以监听界面的操作,比如:点击、拖动、界面更新等信息的,更为强大的是可以获取屏幕信息,同时具备普通Service的能力。

具体如何设置呢?代码如下:

        try{Set enabledServices = AccessibilityUtils.getEnabledServicesFromSettings(context);    //这个是获取所有可用的无障碍service列表if (enabledServices == (Set) Collections.emptySet()) {    //如果获取的service集合为空,新创建一个集合enabledServices = new HashSet();}ComponentName toggledService = ComponentName.unflattenFromString("com.vc/.service.DetectionService");//添加自己服务的包名和类名enabledServices.add(toggledService);    //将需要设置的服务降到集合里// Enabling at least one service enables accessibility.StringBuilder enabledServicesBuilder = new StringBuilder();    for (ComponentName enabledService : enabledServices) {enabledServicesBuilder.append(enabledService.flattenToString());    //将所有的服务变成字符串,串到一起enabledServicesBuilder.append(AccessibilitySettings.ENABLED_ACCESSIBILITY_SERVICES_SEPARATOR);    //每次添加一个服务的时候后面加上分隔符.}final int enabledServicesBuilderLength = enabledServicesBuilder.length();if (enabledServicesBuilderLength > 0) {enabledServicesBuilder.deleteCharAt(enabledServicesBuilderLength - 1);    //添加最后一个服务肯定会多出一个分隔符,这里删掉多余的分隔符}android.provider.Settings.Secure.putString(context.getContentResolver(),android.provider.Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,enabledServicesBuilder.toString());    //将服务的字符串重新存储// Update accessibility enabled.android.provider.Settings.Secure.putInt(context.getContentResolver(),android.provider.Settings.Secure.ACCESSIBILITY_ENABLED, 1);    }catch(Exception e){}

上面的代码中获取所有无障碍service方法getEnabledServicesFromSettings是由AccessibilityUtils类来处理的,AccessibilityUtils这个类Android6.0的路径是在packages/apps/Settings/src/com/android/settings/accessibility/AccessibilityUtils.java,Android 7.0之后被放到了frameworks/base/packages/SettingsLib/src/com/android/settingslib/accessibility/AccessibilityUtils.java这里,

           /*** @return the set of enabled accessibility services. If there are no services,* it returns the unmodifiable {@link Collections#emptySet()}.*/public static Set getEnabledServicesFromSettings(Context context) {return getEnabledServicesFromSettings(context, UserHandle.myUserId());}/*** @return the set of enabled accessibility services for {@param userId}. If there are no* services, it returns the unmodifiable {@link Collections#emptySet()}.*/public static Set getEnabledServicesFromSettings(Context context, int userId) {final String enabledServicesSetting = Settings.Secure.getStringForUser(context.getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,userId);if (enabledServicesSetting == null) {return Collections.emptySet();}final Set enabledServices = new HashSet<>();final TextUtils.SimpleStringSplitter colonSplitter = sStringColonSplitter;colonSplitter.setString(enabledServicesSetting);while (colonSplitter.hasNext()) {final String componentNameString = colonSplitter.next();final ComponentName enabledService = ComponentName.unflattenFromString(componentNameString);if (enabledService != null) {enabledServices.add(enabledService);}}return enabledServices;}

这样就可以将自己的无障碍服务设置默认打开了~


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部