2014-07-15 12 views
10

Sto provando a impostare adUnitId a livello di programmazione per gli annunci dai nuovi servizi di Google Play (vecchio AdMob).Come specificare adUnitId in modo programmatico per AdMob?

ho questo in XML (usato in un <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"/> 

e questo a 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); 

E ottengo:

La dimensione annuncio e l'ID dell'unità pubblicitaria deve essere impostato prima di chiamare loadAd.

Quindi la seconda opzione era di rendere l'annuncio programmaticamente.

Il nuovo 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" 
    /> 

Il nuovo codice:

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

Ma ottengo lo stesso errore.

Ho provato anche ad ereditare da com.google.android.gms.ads.AdView per creare una vista personalizzata, ma è definitiva.

Qualche suggerimento?

+0

Guarda qui http://stackoverflow.com/questions/15953075/how-to-create-an-admob- banner-programatically – Loures

+0

Penso che la risposta sia vecchia. Non ho il costruttore AdView (, , ) –

+0

Ho avuto lo stesso problema, stessa eccezione. Funziona solo quando adUnitId è in xml. –

risposta

18

Il metodo loadAd() controlla se (mAdView.getAdSize() == null || mAdView.getAdUnitId() == null) quando loadAdviene.

prova ad accedere l'uscita booleano di (mAdView.getAdSize() == null || mAdView.getAdUnitId() == null) prima di chiamare loadAd per determinare il suo stato:

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

Grazie! Questo è funziona !! –

+0

ottima risposta! Grazie :) – belphegor

Problemi correlati