无需上下文context获取当前Application
Android使用反射获取当前Application
没有Activity,没有Application,快速获取当前应用的Application。当个工具类用,再也不烦恼,目前在Android Q上并且是targetSdk为29也能获取到,已验证可用。
/**
* 获取当前应用的Application
* 先使用ActivityThread里获取Application的方法,如果没有获取到,
* 再使用AppGlobals里面的获取Application的方法
* @return
*/
public static Application getCurApplication(){
Application application = null;
try{
Class atClass = Class.forName("android.app.ActivityThread");
Method currentApplicationMethod = atClass.getDeclaredMethod("currentApplication");
currentApplicationMethod.setAccessible(true);
application = (Application) currentApplicationMethod.invoke(null);
Log.d("fw_create","curApp class1:"+application);
}catch (Exception e){
Log.d("fw_create","e:"+e.toString());
}
if(application != null)
return application;
try{
Class atClass = Class.forName("android.app.AppGlobals");
Method currentApplicationMethod = atClass.getDeclaredMethod("getInitialApplication");
currentApplicationMethod.setAccessible(true);
application = (Application) currentApplicationMethod.invoke(null);
Log.d("fw_create","curApp class2:"+application);
}catch (Exception e){
Log.d("fw_create","e:"+e.toString());
}
return application;
}
无需上下文context获取当前Resources
没有Activity,没有Application,快速获取当前应用的Resources 。当个工具类用,再也不烦恼,目前在Android Q上并且是targetSdk为29也能获取到,已验证可用。
public static Resources getResources(){
Resources resources = Resources.getSystem();
return resources;
}
本文介绍如何在没有Activity或Application的情况下,通过反射方法获取Android应用的当前Application实例和Resources对象,适用于targetSdk为29的Android Q系统,已验证可用。
17万+





