2012-04-19 18 views
9

Ich habe 7 Aktivitäten in meiner Anwendung. Ich möchte Anzeige in jeder AktivitätAdmob zu mehreren Aktivitäten?

Ob ich jedes AdView in jeder Aktivität erstellen muss?

oder

ist es eine Alternative vorherigen Tätigkeit Behälter OR wiederzuverwenden es verhindern, zu zerstören, so kann ich in der nächsten Aktivität verwenden ....

Jeder Code oder Hinweis wir werden Ich schätze.

Thankx

+0

a Erstellen AdAwareActivity der Superklasse, richten Sie Ihre Anzeigenansicht in onCreate()/onDestroy() ordnungsgemäß ein oder aus und erweitern Sie dann in jeder Aktivität, die Ad-Funktionen erfordert, AdAwareActivity. – yorkw

+0

Ich würde gerne die Antwort für diese Frage wissen, wie ich auch versuche, das gleiche Problem zu lösen :) – Anshul

Antwort

8

Ich tat dies. Danke an York Kommentar. Dies ist kein effizienter Code. Aber Sie können entsprechend ändern. Das reduziert Ihren Code für jede Aktivität.

Nur Verlängert "TestingAdmobActivity" & Anruf SetupAds() Ihre ADVS zu nennen.

My 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"); 
    } 
} 

Mein 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); 
      } 
     }); 
    } 
} 

Mein 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(); 
      } 
     }); 
    } 
} 

Mein 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> 

Hinweis: aus Gründen der Berechtigungen von Google AdMob-SDK verwendet wird, muss ich dies mit Version min-sdk auf Android 4.0 sdk bauen 7

+1

Große nette Antwort – Anshul

+6

Ich bin ein bisschen verwirrt..Wie benutzt das den Ad-Container wieder? – States

+3

Sie verwenden den Code und nicht den Anzeigencontainer erneut. Wie funktioniert das? Beim Erstellen von Activity_2 verwenden Sie das von Activity_1 erstellte AdView nicht erneut. – Htaras

1

In meiner App habe ich einen Cache von 0..12 Anzeigen zu einem bestimmten Zeitpunkt. Ich benutze sie über verschiedene Fragmente in einem endlosen ViewPager. Die Caching-Klasse ist verantwortlich für das Laden der Anzeigen für die Fragmente.

Der Trick ist:

  1. Rufen Sie die AdView des onDestory nur, wenn Sie sicher sind, bist du gut mit dieser AdView Instanz getan. Dies bedeutet, dass die Fragmente selbst nicht dafür verantwortlich sind.

  2. Vorbei an der AdView die sich zwischen den Fragmenten, müssen wir uns daran erinnern jedes AdView von ihrer Hierarchie zu lösen:

(nur auf dem UI-Thread natürlich):

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

}