近期项目需求,添加google的admob广告的时候发现有俩个版本。早期的版本已经发出,需要新版更新时会有冲突。所以想到了Java反射机制。
例一、
java代码:
mAdmobView = new AdView((Activity) mContext, AdSize.BANNER,
getAdmobKey());
mLinearLayout.addView(mAdmobView);
反射代码:
mAdmobViewClass = Class.forName("com.google.ads.AdView");
Class<?> adSizeClass = Class.forName("com.google.ads.AdSize");
Field bannerField = adSizeClass.getDeclaredField("BANNER");
bannerField.setAccessible(true);
Object bannerFieldObject = bannerField.get(adSizeClass);
mAdmobView = mAdmobViewClass.getConstructor(Activity.class,
adSizeClass, String.class).newInstance(mContext,
bannerFieldObject, getAdmobKey());
1、先获取AdView类
2、初始化AdSize
3、获取AdView对象。getContructor(Activity.class,adSizeClass,String.class),参数为构造函数的参数类型。newInstance(mContext,bannerFieldObject,getAdmobKey())参数内容为构造参数的数据。
例二、
Java代码:
mAdmobRequest = new AdRequest();
mAdmobView.loadAd(mAdmobRequest);
反射代码:
Class<?> AdRequest = Class.forName("com.google.ads.AdRequest");
Object mAdmobRequest = AdRequest.getConstructor().newInstance();
Method loadAd = mAdmobViewClass.getMethod("loadAd",
Class.forName("com.google.ads.AdRequest"));
loadAd.invoke(mAdmobView, mAdmobRequest);
1、先获得AdRequest的实例,getConstructor()的参数为构造函数的参数类型,newInstance()的参数为构造函数的参数数据。
2、调用函数用类对象的函数名可以直接获取。
3、invoke调用函数。mAdmobView是object类型的AdView的对象。
好了,就总结这些吧。
还有可以参考这位大神的,很全面。看看吧: