2012-04-19 11 views
9

Tengo 7 actividades en mi aplicación. Quiero mostrar admob en cada actividadAdmob en actividades múltiples?

Si tengo que crear cada AdView en cada actividad?

o

¿hay alguna alternativa a la reutilización de contenedores anterior actividad O le impide destruir por lo puedo utilizar en la próxima actividad ....

Cualquier código o sugerencia estaremos b apreciar.

Thankx

+0

Crear una super clase AdAwareActivity, configura/deshace adecuadamente su vista de anuncio en onCreate()/onDestroy(), luego en cada actividad que requiere funciones publicitarias, amplía AdAwareActivity. – yorkw

+0

Me encantaría saber la respuesta a esta pregunta, ya que también estoy tratando de resolver el mismo problema :) – Anshul

Respuesta

8

I HIZO esto. Gracias a yorkw comment. Este no es un código eficiente. Pero puedes modificar en consecuencia. Eso reduce su código para cada actividad.

Sólo Extiende "TestingAdmobActivity" & SetupAds de llamada() para llamar a sus ADV.

Mi SuperClass "TestingAdmobActivity.java"

package com.test.myadmob; 

import com.google.ads.Ad; 
import com.google.ads.AdListener; 
import com.google.ads.AdRequest; 
import com.google.ads.AdRequest.ErrorCode; 
import com.google.ads.AdSize; 
import com.google.ads.AdView; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.util.Log; 
import android.view.View; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.LinearLayout; 

public class TestingAdmobActivity extends Activity implements AdListener{ 
    public AdView adView; 
    public String ADV_PUB_ID = "a14e2fb60918999"; 
    private boolean adVisible = true; 
    LinearLayout layout; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.i("Admob", "Calling External"); 
    } 

    public void SetupAds(){ 
    Log.i("AdMob", "Start Setup"); 
    layout = new LinearLayout(this); 
    layout.setOrientation(LinearLayout.VERTICAL); 
    layout.setGravity(android.view.Gravity.BOTTOM | android.view.Gravity.CENTER_HORIZONTAL); //To put AdMob Adv to Bottom of Screen 
    Log.i("AdMob", "End Layout Setup"); 

    addContentView(layout, new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); 

    adView = new AdView(this, AdSize.BANNER, ADV_PUB_ID); 
    adView.setAdListener(this); 
    Log.i("AdMob", "Init complete Adview"); 

    layout.addView(adView, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    Log.i("AdMob", "Done AddView Layout"); 

    AdRequest request = new AdRequest();  
    request.addTestDevice(AdRequest.TEST_EMULATOR); 
    request.addKeyword("LifeOK"); 

    adView.loadAd(request); 

    Log.i("AdMob", "End Setup");  
    } 

    private Handler handler = new Handler() 
    { 
     public void handleMessage(Message msg) 
     { 
      switch (msg.what) 
      { 
       case 0:  //Disable Adv 
        if (adVisible) 
         adVisible = false; 
        break; 

       case 1:  //Enable Adv 
        if (!adVisible) 
        { 
         Log.i("AdMob", "Case 1");      
         adVisible = true; 
        } 
        break; 

       case 2:  //Enable but Hide Adv 
         adView.setVisibility(View.GONE);     
        break; 

       case 3:  //Enable but Show Adv 
         adView.setVisibility(View.VISIBLE); 
        break; 

       default: 
        break; 
      } 
     } 
    }; 

    public void DisableAds() 
    { 
     Log.i("AdMob", "Request Disable Adv"); 
     handler.sendEmptyMessage(0); 
    } 

    public void EnableAds() 
    { 
     Log.i("AdMob", "Request Enable Adv"); 
     handler.sendEmptyMessage(1); 
    } 

    public void HideAdv() //Enable Adv but Hide 
    { 
     Log.i("AdMob", "Request Hide Adv"); 
     handler.sendEmptyMessage(2); 
    } 

    public void ShowAdv() //Show Adv 
    { 
     Log.i("AdMob", "Request Show Adv"); 
     handler.sendEmptyMessage(3); 
    } 

    @Override 
    public void onDismissScreen(Ad arg0) { 
     // TODO Auto-generated method stub 
     Log.d("AdMob", "Dismiss Screen"); 
    } 

    @Override 
    public void onFailedToReceiveAd(Ad arg0, ErrorCode arg1) { 
     // TODO Auto-generated method stub 
     Log.d("AdMob", "failed to receive ad (" + arg1 + ")");  
    } 

    @Override 
    public void onLeaveApplication(Ad arg0) { 
     // TODO Auto-generated method stub 
     Log.d("AdMob", "Leaving Application"); 
    } 

    @Override 
    public void onPresentScreen(Ad arg0) { 
     // TODO Auto-generated method stub 
     Log.d("AdMob", "Present Screen"); 
    } 

    @Override 
    public void onReceiveAd(Ad arg0) { 
     // TODO Auto-generated method stub 
     Log.d("AdMob", "Adv Received"); 
    } 
} 

Mi FirstActivityClass "NewActivity_1.java"

package com.test.myadmob; 

import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 

public class NewActivity_1 extends TestingAdmobActivity { 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Log.i("Admob", "OnCreate"); 
     SetupAds(); 
     Log.i("Admob", "Done"); 

     Button button1 = (Button) findViewById(R.id.button1); 
     button1.setOnClickListener(new View.OnClickListener() {   
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Log.i("Admob", "Going to Activity 2"); 
       Intent mainIntent = new Intent().setClass(NewActivity_1.this, NewActivity_2.class); 
       startActivity(mainIntent); 
      } 
     }); 
    } 
} 

Mi SecondActivityClass "NewActivity_2.java"

package com.test.myadmob; 

import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 

public class NewActivity_2 extends TestingAdmobActivity { 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Log.i("Admob", "OnCreate"); 
     SetupAds(); 
     Log.i("Admob", "Done"); 

     Button button1 = (Button) findViewById(R.id.button1); 
     button1.setOnClickListener(new View.OnClickListener() {   
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Log.i("Admob", "Going Back to Activity 1"); 
       finish(); 
      } 
     }); 
    } 
} 

Mi AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.test.myadmob" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="7" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 
     <activity 
      android:label="@string/app_name" 
      android:name=".NewActivity_1" > 
      <intent-filter > 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".TestingAdmobActivity" ></activity> 
     <activity android:name=".NewActivity_2" ></activity> 

     <activity android:name="com.google.ads.AdActivity"    
      android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" 
      > 

     </activity> 
    </application> 

    <!-- AdMob SDK requires Internet permission --> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />    <!-- to get Android Device ID --> 

</manifest> 

Nota: por el bien de los permisos utilizados por SDK de Google AdMob, tengo que construir esta en Android 4.0 SDK con la versión SDK 7 min-

+1

Muy buena respuesta – Anshul

+6

Estoy un poco confundido ... ¿Cómo reutiliza el contenedor de anuncios? – States

+3

Está reutilizando el código, no el contenedor de anuncios. ¿Como funciona esto? Al crear Activity_2, no está reutilizando el AdView creado por Activity_1. – Htaras

1

En mi aplicación, tengo un caché de 0.12 anuncios en un momento dado. Los estoy reutilizando a través de diferentes Fragmentos en un sin fin de ViewPager. La clase de almacenamiento en caché se encarga de cargar el suministro de los anuncios a los Fragmentos.

El truco consiste en:

  1. llamado de onDestory sólo cuando esté seguro de que haya terminado con esa instancia AdView para bien AdView. Esto significa que los Fragmentos en sí mismos no están a cargo de esto.

  2. Al pasar los propios de AdView entre los fragmentos, tenemos que recordar para separar cada AdView de su jerarquía:

(sólo en el hilo de interfaz de usuario, por supuesto):

public void detachFromHirerchy() 
{ 
    View adView = getAdView(); 
    if (adView != null) 
    { 
     ViewGroup parent = (ViewGroup) adView.getParent(); 
     if (parent != null) 
     { 
      parent.removeView(adView); 
     } 
    } 

} 
Cuestiones relacionadas