android反射方式内部クラスメンバーへのアクセス


// Context mmsCtx = createPackageContext( "com.android.lockscreen"          Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);  Class<?> maClass = Class.forName( "com.android.lockscreen.LockScreenActivity" , true , mmsCtx.getClassLoader()); 
  Object maObject = maClass.newInstance(); Field f_mPm = maClass.getDeclaredField( "TAG" );  f_mPm.setAccessible( true );                   Log.i(LOG_TAG, "obj:" +f_mPm.get(maObject));
  
//アクセス方法           // try {              Context mmsCtx = createPackageContext( "com.android.lockscreen"                      Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);               Class<?> maClass = Class.forName( "com.android.lockscreen.LockScreenActivity" , true , mmsCtx.getClassLoader());                              Object maObject = maClass.newInstance();              Field f_mPm = maClass.getDeclaredField( "TAG" );                              //maClass.getDeclaredMethod("", parameterTypes);              f_mPm.setAccessible( true );                           Log.i(LOG_TAG, "obj:" +f_mPm.get(maObject));                                                    Class[] resource = new Class[]{Context. class };                 resourceObj = new Object[]{mmsCtx};                                     Method addsMethod = maClass.getDeclaredMethod( "getLockScreenView" , resource);                  addsMethod.setAccessible( true );                                     View addsResult = (View)addsMethod.invoke(maObject, resourceObj);                  Log.i(LOG_TAG, "addsResult:" +addsResult);                             } catch (Exception e) {              // TODO Auto-generated catch block              e.printStackTrace();          }
  //
  public class LockScreenActivity extends Activity {                 private String TAG = "LockScreenActivity" ;      //private LockScreen mScreen = new LockScreen(LockScreenActivity.this);             private LockScreen getLockScreenView(Context context){                     Log.i(TAG, "context:" +context);          return new LockScreen(context);      }        }
  
? // setting Context               Context mmsCtx = createPackageContext( "com.android.settings"                      Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);               // setting classloader com.android.settings.ManageApplications                Class<?> maClass = Class.forName( "com.android.settings.ManageApplications" , true , mmsCtx.getClassLoader());               //                Object maObject = maClass.newInstance();                                /*               * mPm 。 mPm SizeObserver invokeGetSize ,               * onCreate , 。               */                Field f_mPm = maClass.getDeclaredField( "mPm" );               f_mPm.setAccessible( true );                           f_mPm.set(maObject, mmsCtx.getPackageManager());


:http://www.cnblogs.com/wanqieddy/archive/2011/10/25/2224200.html