package sc.tools;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import android.app.Application;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
//import android.widget.Toast;
/** 通过反射获取当前应用的Application、Context */
public class AppliactionTool
{
private static Application application;
private static Context context;
/** 反射获取Application */
public static Application getApplication()
{
if (application != null) { return application; }
try
{
Class localClass1 = Class.forName("com.android.internal.os.RuntimeInit");
Field localField1 = localClass1.getDeclaredField("mApplicationObject");
localField1.setAccessible(true);
Object localObject1 = localField1.get(localClass1);
Class localClass2 = Class.forName("android.app.ActivityThread$ApplicationThread");
Field localField2 = localClass2.getDeclaredField("this$0");
localField2.setAccessible(true);
Object localObject2 = localField2.get(localObject1);
Class localClass3 = Class.forName("android.app.ActivityThread");
Method localMethod = localClass3.getMethod("getApplication", new Class[0]);
localMethod.setAccessible(true);
Application localApplication = (Application) localMethod.invoke(localObject2, new Object[0]);
if (localApplication != null) application = localApplication;
}
catch (Exception localException)
{
localException.printStackTrace();
}
// Toast.makeText(application, "AppliactionTool -> getApplication()", Toast.LENGTH_SHORT).show();
return application;
}
/** 获取Context */
public static Context getContext()
{
if (context != null) return context;
return getApplication();
}
/** 获取targetSdkVersion */
public static int getTargetSdkVersion()
{
PackageManager localPackageManager = getContext().getPackageManager();
ApplicationInfo localApplicationInfo;
try
{
localApplicationInfo = localPackageManager.getApplicationInfo(getContext().getPackageName(), 0);
}
catch (PackageManager.NameNotFoundException localNameNotFoundException)
{
localNameNotFoundException.printStackTrace();
return 0;
}
if (localApplicationInfo != null) { return localApplicationInfo.targetSdkVersion; }
return 0;
}
}
————————————————
版权声明:本文为CSDN博主「scimence」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/scimence/article/details/105796301