Dan*_*les 13 android admob adview
我正在尝试以编程方式将adUnitId设置为来自新版Google Play服务(旧版AdMob)的广告.
我有这个XML(用于<include>):
<com.google.android.gms.ads.AdView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
ads:adSize="BANNER"/>
Run Code Online (Sandbox Code Playgroud)
这在onCreate()中:
AdView mAdview = (AdView)findViewById(R.id.adView);
mAdview.setAdUnitId(((App)getApplication()).getAdmobKey());
mAdview.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
super.onAdLoaded();
findViewById(R.id.adView).setVisibility(View.VISIBLE);
}
});
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.build();
mAdview.loadAd(adRequest);
Run Code Online (Sandbox Code Playgroud)
我得到:
必须在调用loadAd之前设置广告尺寸和广告单元ID.
所以第二种选择是以编程方式制作广告.
新的XML:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:id="@+id/adView"
/>
Run Code Online (Sandbox Code Playgroud)
新代码:
AdView mAdview = new AdView(this);
...
((LinearLayout)findViewById(R.id.adView)).addView(mAdview);
mAdview.loadAd(adRequest);
Run Code Online (Sandbox Code Playgroud)
但我得到了同样的错误.
我还尝试从com.google.android.gms.ads.AdView继承来制作自定义视图,但这是最终的.
有什么建议吗?
Nan*_*tey 23
该方法loadAd()检查(mAdView.getAdSize() == null || mAdView.getAdUnitId() == null)loadAd何时发生.
尝试(mAdView.getAdSize() == null || mAdView.getAdUnitId() == null)在调用loadAd之前记录布尔输出以确定其状态:
mAdView = new AdView(this);
mAdView.setAdSize(AdSize.BANNER);
mAdView.setAdUnitId(AD_UNIT_ID);
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.build();
if(mAdView.getAdSize() != null || mAdView.getAdUnitId() != null)
mAdView.loadAd(adRequest);
// else Log state of adsize/adunit
((LinearLayout)findViewById(R.id.adView)).addView(mAdview);
Run Code Online (Sandbox Code Playgroud)