android android-activity admob adview

android - Admob en mĂșltiples actividades?



android-activity adview (2)

Hice 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 .

Solo extiende "TestingAdmobActivity" y llama a SetupAds () para llamar a tus anuncios.

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 compilar esto en android 4.0 sdk con min-sdk versión 7

Tengo 7 actividades en mi aplicación. Quiero mostrar admob en cada actividad

Si tengo que crear cada AdView en cada actividad?

o

¿Hay alguna alternativa para reutilizar contenedor de actividad anterior O evitar que destruya, así que puedo usar en la próxima actividad ....

Cualquier código o sugerencia que podamos apreciar.

Thankx


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 es:

  1. Llame a onDestory de onDestory solo cuando esté seguro de haber terminado con esa instancia de AdView para siempre. Esto significa que los Fragmentos en sí mismos no están a cargo de esto.

  2. Al pasar los propios AdView entre los Fragmentos, debemos recordar separar cada AdView de su jerarquía:

(solo en el hilo de la 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 ); } } }