RK3326 Android 8.1 为自己的APK的服务默认开启无障碍权限,不会有任何的弹窗

首先致谢 lancelots

因为自己不是科班,所以很多东西都来自于网友的博客,非常感谢网友的分享,和快速的回复。

在能开机就运行的代码的地方加入这一块代码

// 这是获取服务列表的函数,被下面的函数调用
public Set getEnabledServices(Context context) {
        final String enabledServicesSetting = Settings.Secure.getString(
                context.getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);

        if (enabledServicesSetting == null) {
            return Collections.emptySet();
        }

        final Set enabledServices = new HashSet<>();
        final TextUtils.SimpleStringSplitter colonSplitter = new TextUtils.SimpleStringSplitter(':');
        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;
    }

// 下面的代码需要保证开机就能运行,需要放到一个函数里面去
try{
	/* Get a list of all available accessibility services */
	Set enabledServices = getEnabledServices(context);

	/* If the obtained service collection is empty, create a new collection */
	if (enabledServices == (Set) Collections.emptySet()) {
		enabledServices = new HashSet();
	}

	// 将需要设置的服务到集合里
	ComponentName toggledService = ComponentName.unflattenFromString("包名/类名");//添加自己服务的包名和类名
	enabledServices.add(toggledService);

	StringBuilder enabledServicesBuilder = new StringBuilder();    
	// 将所有的服务变成字符串,串到一起
	for (ComponentName enabledService : enabledServices) {
		enabledServicesBuilder.append(enabledService.flattenToString());
		//每次添加一个服务的时候后面加上分隔符
		enabledServicesBuilder.append(':');
	}

	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) {};

涉及到的包名

import java.util.Set;
import java.util.Collections;
import android.text.TextUtils;
import java.util.HashSet;

参考

https://blog.csdn.net/lancelots/article/details/84066745#comments

你可能感兴趣的:(Android系统开发,rockchip)