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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值