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 KeepAliveActivity 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( "设置应用守护", "keepAlive", "timeOut:检测时间间隔,单位毫秒,0=关闭守护;packageName:应用包名;className:暂未使用,可传空字符串。", this::keepAlive, TestItem.InputField.number( "请输入 timeOut:单位毫秒,0=关闭守护", "10000", "timeOut"), TestItem.InputField.text( "请输入 packageName", "com.android.settings", "packageName"), TestItem.InputField.text( "请输入 className,可为空", "", "className")) ); } 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 keepAlive(TestItem item, String[] inputs) { try { int timeOut = parseNonNegativeInt(inputs, 0, "timeOut"); String packageName = requireInput(inputs, 1, "packageName"); String className = inputs.length > 2 && inputs[2] != null ? inputs[2].trim() : ""; zysjSystemManager().keepAlive(timeOut, packageName, className); return "keepAlive 调用完成"; } catch (Throwable e) { return "keepAlive 调用失败:" + e.getClass().getName() + ": " + e.getMessage(); } } private int parseNonNegativeInt(String[] inputs, int index, String fieldName) { String value = requireInput(inputs, index, fieldName); try { int result = Integer.parseInt(value); if (result < 0) { throw new IllegalArgumentException(fieldName + " 不能小于 0"); } return result; } catch (NumberFormatException e) { throw new IllegalArgumentException(fieldName + " 必须是整数"); } } 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(); } }