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;
}
}