public static Object currentActivityThread() {
try {
Class<?> activityThreadClass = Class.forName("android.app.ActivityThread");
Field activityThread = activityThreadClass.getDeclaredField("sCurrentActivityThread");
activityThread.setAccessible(true);
return activityThread.get(null);
} catch (Exception e) {
return null;
}
}
这是利用反射获取currentActivityThread
public static Application currentApplication() {
try {
Class<?> activityThreadClass = Class.forName("android.app.ActivityThread");
Method application = activityThreadClass.getDeclaredMethod("currentApplication");
application.setAccessible(true);
return (Application) application.invoke(null);
} catch (Exception e) {
return null;
}
}
这是用反射获取currentApplication
public static String currentPackageName() {
try {
Class<?> activityThreadClass = Class.forName("android.app.ActivityThread");
Method packageName = activityThreadClass.getDeclaredMethod("currentPackageName");
packageName.setAccessible(true);
return (String) packageName.invoke(null);
} catch (Exception e) {
return null;
}
}
这是用反射获取currentPackageName
public static String currentProcessName() {
try {
Class<?> activityThreadClass = Class.forName("android.app.ActivityThread");
Method processName = activityThreadClass.getDeclaredMethod("currentProcessName");
processName.setAccessible(true);
return (String) processName.invoke(null);
} catch (Exception e) {
return null;
}
}
这是用反射获取currentProcessName
如果获取失败,可能的原因有二:
安卓版本太高,有反射限制
时机过早,尚未初始化完毕