2014-07-15 16 views
10

Próbuję programowo ustawić program adUnitId na reklamy z nowych usług Google Play (stary AdMob).Jak określić adUnitId programowo dla AdMob?

mam to w XML (stosowanego w <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"/> 

i to w 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); 

I otrzymujemy:

rozmiar reklamy Identyfikator jednostki reklamowej musi zostać ustawiony przed wywołaniem metody loadAd.

Druga opcja polegała na zaprogramowaniu reklamy.

Nowy 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" 
    /> 

Nowy kod:

AdView mAdview = new AdView(this); 
... 
((LinearLayout)findViewById(R.id.adView)).addView(mAdview); 
mAdview.loadAd(adRequest); 

Ale pojawia się ten sam błąd.

Próbowałem również dziedziczyć z com.google.android.gms.ads.AdView, aby utworzyć niestandardowy widok, ale jest on ostateczny.

Jakieś sugestie?

+0

Spójrz tutaj http://stackoverflow.com/questions/15953075/how-to-create-an-admob- banner-programowo – Loures

+0

Myślę, że ta odpowiedź jest stara. Nie mam konstruktora AdView (, , ) –

+0

Mam ten sam problem, ten sam wyjątek. Działa tylko wtedy, gdy adUnitId jest w języku xml. –

Odpowiedz

18

Metoda loadAd() sprawdza, czy (mAdView.getAdSize() == null || mAdView.getAdUnitId() == null) po uruchomieniu loadAd.

Spróbuj zalogować się logiczną wyjście (mAdView.getAdSize() == null || mAdView.getAdUnitId() == null) przed wywołaniem loadAd celu określenia jego stanu:

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); 
+0

Dziękujemy! To działa! –

+0

świetna odpowiedź! dzięki :) – belphegor

Powiązane problemy