需求:默认开启对应的无障碍服务开关,即开机自启打开,且重启不会关闭。因为 没接触过,以为修改很容易,但改了好几天都没改好,原本打算放弃的我,但始终坚持着修改,想尽一切办法,经过不断地尝试,终于不负有心人,解决了。
/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java 【默认加载对应的无障碍服务,需添加完整】
存入数据库:DatabaseHelper.java
loadSetting(stmt, Settings.Secure.ACCESSIBILITY_ENABLED,
1);
loadSetting(stmt, Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
"包名/包名.服务名");
private void loadSecureSettings(SQLiteDatabase db) {
SQLiteStatement stmt = null;
try {
stmt = db.compileStatement("INSERT OR IGNORE INTO secure(name,value)"
+ " VALUES(?,?);");
// Don't do this. The SystemServer will initialize ADB_ENABLED from a
// persistent system property instead.
//loadSetting(stmt, Settings.Secure.ADB_ENABLED, 0);
//*/add,this effect useful
loadSetting(stmt, Settings.Secure.ACCESSIBILITY_ENABLED,
1);
loadSetting(stmt, Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
"com.xigu.uct.ui/com.xigu.uct.ui.service.PtytService");
loadSetting(stmt, Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
"com.xigu.uct.ui/com.xigu.uct.ui.service.ForegroundService");
loadSetting(stmt, Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
"com.xigu.uct.ui/com.xigu.uct.ui.service.KeyMonitorService");
//*/
/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
【开机启动相关无障碍服务】
//*/tyd,lxd,ad pkg
import java.util.Set;
import java.util.Collections;
import android.text.TextUtils;
import java.util.HashSet;
//*/
final void finishBooting() {
final void finishBooting() {
synchronized (this) {
xxxxxxxxxxxx;
}
//*/add accessiblity
try{
Set<ComponentName> enabledServices = getEnabledServices(mContext);
if (enabledServices == (Set<?>) Collections.emptySet()) {
enabledServices = new HashSet<ComponentName>();
}
//
ComponentName toggledService = ComponentName.unflattenFromString("com.xigu.uct.ui/com.xigu.uct.ui.service.PtytService");//
ComponentName toggledService2 = ComponentName.unflattenFromString("com.xigu.uct.ui/com.xigu.uct.ui.service.ForegroundService");//
ComponentName toggledService3 = ComponentName.unflattenFromString("com.xigu.uct.ui/com.xigu.uct.ui.service.KeyMonitorService");//
enabledServices.add(toggledService);
enabledServices.add(toggledService2);
enabledServices.add(toggledService3);
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(mContext.getContentResolver(),
android.provider.Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, enabledServicesBuilder.toString());
// Update accessibility enabled.
android.provider.Settings.Secure.putInt(mContext.getContentResolver(),
android.provider.Settings.Secure.ACCESSIBILITY_ENABLED, 1);
} catch(Exception e) {};
//*/
// UART is on if init's console service is running, send a warning notification.
showConsoleNotificationIfActive();
t.traceEnd();
}
//*/add getEnabledServices method
public Set<ComponentName> getEnabledServices(Context context) {
final String enabledServicesSetting = Settings.Secure.getString(
context.getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);
if (enabledServicesSetting == null) {
return Collections.emptySet();
}
final Set<ComponentName> 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;
}
//*/