Android Keyguard 앱 ('화면 잠금'을 보유하고있는 시스템 앱)에 액세스 할 수있는 앱을 작성하려고합니다. 나는 Reflection을 사용하여 실행중인 KeyguardUpdateMonitor 인스턴스에 대한 참조를 얻으려고 시도했지만, 지금까지는 java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
만을 받았습니다.java.lang.IllegalAccessError Android 내부 앱의 정적 기능에 액세스하려고 시도했습니다.
try {
DexFile df = new DexFile(new File("/system/priv-app/Keyguard.apk"));
String packageName = "com.android.keyguard";
Context packageContext = context.createPackageContext(packageName,
Context.CONTEXT_INCLUDE_CODE
| Context.CONTEXT_IGNORE_SECURITY);
ClassLoader cl = packageContext.getClassLoader();
Class keyguardUpdateMonitor = df.loadClass(packageName
+ ".KeyguardUpdateMonitor", cl);
Method getKeyguardUpdateMonitorInstance
= keyguardUpdateMonitor.getMethod("getInstance", Context.class);
Object argumentsForGetInstance[] = new Object[1];
argumentsForGetInstance[0] = packageContext;
Object keyguardUpdateMonitorInstance
= getKeyguardUpdateMonitorInstance.invoke(null, packageContext);
...
}
이 코드는 서비스에 통해 인스턴스 된 클래스 내에서 실행됩니다 : 다음은 문제의 원인이되는 코드입니다.
내가 전화하려고 시도하는 방법의 서명은 public static KeyguardUpdateMonitor getInstance(Context context)
입니다.
- 내가 의도 한대로 반영을 사용할 수 있습니까? 아니면
KeyguardUpdateMonitor
의 인스턴스가 필요합니까? - 특별한 사용 권한이 필요합니까?
- 내 아이디어에 근본적인 실수가 있습니까? 그렇다면 어떻게 안드로이드 (KitKat 이상)의 Keyguard에 액세스 할 수 있습니까?
힌트를 가져 주셔서 감사합니다.하지만 브로드 캐스트 리시버가 처리하는 의도는 내 문제를 해결하지 못합니다. 어쨌든 고마워. 첫 단락은 매우 도움이되었습니다. Btw : KeyguardUpdateMonitor에 getInstance (Context) 함수가 있습니다. 제공 한 링크가 구형입니다. – user2925177