通过反射获取当前应用的Application、Context

 
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值