Admob en múltiples actividades?
Tengo 7 actividades en mi aplicación. Quiero mostrar admob en cada actividad
¿Tengo que crear cada AdView en cada actividad?
- ¿Cómo comprobar si AdView está visible?
- AdView causa pérdida de memoria
- la animación adview admob hace que glsurfaceview se retrasa
- Error de AdMob (Error al inflar la clase com.google.ads.AdView)
- Impedir que AdView se recupere para cada actividad
o
¿Hay alguna alternativa para reutilizar el contenedor de actividad anterior O impedir que se destruya así que puedo usar en la próxima actividad ….
Cualquier código o pista que apreciaremos.
Gracias
- ¿Cómo obtener el mejor tamaño de admob para la configuración actual de la pantalla?
- Cómo ocultar / deshabilitar adview admob?
- WebViewCoreThread utilizado por admob AdView utiliza CPU alta incluso cuando la actividad principal está en pausa
- Problemas con la carga de anuncios de AdMob en la aplicación
- ¿Cómo especificar adUnitId mediante programación para AdMob?
- El tamaño del anuncio y el ID de la unidad de anuncio deben configurarse antes de loadAd cuando se establezca mediante programación
- Android: El uso de adjustPan y adjustResize no funciona, pero necesito ambos
- Cómo implementar AdView AdView en la aplicación para Android
Hice esto. Gracias a yorkw comentario. Esto no es un código eficiente. Pero se puede modificar en consecuencia. Eso reduce el código para cada actividad .
Simplemente extiende "TestingAdmobActivity" y llama a SetupAds () para llamar a tus advs.
Mi SuperClase "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 google admob sdk, tengo que construir esto en android 4.0 sdk con min-sdk versión 7
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 ViewPager sin fin. La clase de almacenamiento en caché se encarga de cargar el suministro de los anuncios a los fragmentos.
El truco es:
-
Llamar a la onDestory de
onDestory
sólo cuando esté seguro de que ha terminado con esa instancia de AdView para siempre. Esto significa que los propios Fragmentos no están a cargo de esto. -
Pasando las propias AdView entre los fragmentos, debemos recordar 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 ); } } }
- ¿Por qué mi tamaño de la aplicación y la versión actual "varía con el dispositivo", aunque sólo he subido un APK?
- Android – Obtención fiable de la ubicación actual