近期項目需求,添加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的對象。
好了,就總結這些吧。
還有可以參考這位大神的,很全面。看看吧: