package com.nodka.zysjtest; import android.app.ZysjSystemManager; import android.content.Context; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class LauncherActivity extends BaseTestActivity { private static final String SERVICE_NOT_FOUND_MESSAGE = "未获取到 ZysjSystemManager 系统服务"; private ZysjSystemManager zysjSystemManager; @Override protected String getPageTitle() { return "开机自启接口测试"; } @Override protected List getTestItems() { return Arrays.asList( new TestItem( "设置应用开机自启动", "bootstrap", "packageName:应用包名;className:应用类名;enabled:true=开启自启,false=关闭自启。", this::bootstrap, TestItem.InputField.text( "请输入 packageName", "com.android.settings", "packageName"), TestItem.InputField.text( "请输入 className", "com.android.settings.Settings", "className"), TestItem.InputField.text( "请输入 enabled:true=开启,false=关闭", "true", "enabled")) ); } private ZysjSystemManager zysjSystemManager() { if (zysjSystemManager != null) { return zysjSystemManager; } for (String serviceName : getServiceNameCandidates()) { Object service = getSystemService(serviceName); if (service instanceof ZysjSystemManager) { zysjSystemManager = (ZysjSystemManager) service; return zysjSystemManager; } } throw new IllegalStateException(SERVICE_NOT_FOUND_MESSAGE); } private List getServiceNameCandidates() { List candidates = new ArrayList<>(); addContextFieldCandidate(candidates, "ZYSJ_SYSTEM_SERVICE"); addContextFieldCandidate(candidates, "ZYSJ_SERVICE"); candidates.add("zysj_system"); candidates.add("zysj"); candidates.add("zysj_system_service"); return candidates; } private void addContextFieldCandidate(List candidates, String fieldName) { try { Field field = Context.class.getField(fieldName); Object value = field.get(null); if (value instanceof String && !candidates.contains(value)) { candidates.add((String) value); } } catch (NoSuchFieldException ignored) { } catch (IllegalAccessException e) { throw new IllegalStateException("读取 Context." + fieldName + " 失败", e); } } private String bootstrap(TestItem item, String[] inputs) { try { boolean enabled = parseBoolean(inputs, 2, "enabled"); if (enabled) { String packageName = requireInput(inputs, 0, "packageName"); String className = requireInput(inputs, 1, "className"); zysjSystemManager().bootstrap(packageName, className, true); } else { zysjSystemManager().bootstrap("", "", false); } return "bootstrap 调用完成"; } catch (Throwable e) { return "bootstrap 调用失败:" + e.getClass().getName() + ": " + e.getMessage(); } } private boolean parseBoolean(String[] inputs, int index, String fieldName) { String value = requireInput(inputs, index, fieldName); if ("true".equalsIgnoreCase(value)) { return true; } if ("false".equalsIgnoreCase(value)) { return false; } throw new IllegalArgumentException(fieldName + " 只能是 true 或 false"); } private String requireInput(String[] inputs, int index, String fieldName) { if (index >= inputs.length || inputs[index] == null || inputs[index].trim().isEmpty()) { throw new IllegalArgumentException(fieldName + " 不能为空"); } return inputs[index].trim(); } }