2012-04-19 6 views
9

मेरे आवेदन में 7 गतिविधियां हैं I मैं हर गतिविधिएकाधिक गतिविधियों पर Admob?

मैं हर गतिविधि में प्रत्येक adview बनाने के लिए चाहे में प्रदर्शन admob करना चाहता है?

या

वहाँ पिछले गतिविधि कंटेनर या यह को रोकने के पुन: उपयोग करने को नष्ट से तो मैं अगले गतिविधि ....

किसी भी कोड या संकेत हम आपको में उपयोग कर सकते हैं किसी भी विकल्प है बी सराहना करते हैं।

धन्यवाद

+0

एक बनाएं सुपर क्लास AdAwareActivity, ऑनरेट()/onDestroy() पर अपने विज्ञापन दृश्य को ठीक से सेट/फाड़ें, फिर प्रत्येक गतिविधि में विज्ञापन फ़ंक्शंस की आवश्यकता होती है, AdAwareActivity को बढ़ाती है। – yorkw

+0

मुझे इस प्रश्न का उत्तर जानना अच्छा लगेगा क्योंकि मैं भी एक ही समस्या का पता लगाने की कोशिश कर रहा हूं :) – Anshul

उत्तर

8

मैंने इसे देखा। Yorkw टिप्पणी के लिए धन्यवाद। यह एक कुशल कोड नहीं है। लेकिन आप तदनुसार संशोधित कर सकते हैं। प्रत्येक गतिविधि के लिए आपका कोड कम कर देता है।

बस अपने advs कॉल करने के लिए "TestingAdmobActivity" & कॉल SetupAds() विस्तार करता है।

मेरे सुपर क्लास "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"); 
    } 
} 

मेरे 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); 
      } 
     }); 
    } 
} 

मेरे 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(); 
      } 
     }); 
    } 
} 

मेरे 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> 

नोट: गूगल AdMob SDK द्वारा प्रयोग किया जाता अनुमतियों के लिए, मैं मिनट-sdk संस्करण के साथ एंड्रॉयड 4.0 एसडीके पर इस का निर्माण करने के लिए है 7

+1

बहुत अच्छा जवाब – Anshul

+6

मैं थोड़ा उलझन में हूं .. यह विज्ञापन कंटेनर का पुन: उपयोग कैसे करता है? – States

+3

आप विज्ञापन कंटेनर नहीं कोड का पुन: उपयोग कर रहे हैं। यह कैसे काम करता है? गतिविधि_2 बनाते समय, आप Activity_1 द्वारा बनाए गए AdView का पुन: उपयोग नहीं कर रहे हैं। – Htaras

1

मेरे ऐप में मेरे पास किसी भी समय 0..12 विज्ञापनों का कैश है। मैं उन्हें एक अंतहीन ViewPager में विभिन्न टुकड़ों में पुन: उपयोग कर रहा हूं। कैशिंग कक्षा विज्ञापन को टुकड़े टुकड़े करने के लिए लोड करने का प्रभारी है।

चाल है करने के लिए:

  1. कॉल adview के onDestory केवल जब आप वाकई अच्छे के लिए कि adview उदाहरण पूरे कर चुके हैं कर रहे हैं। इसका मतलब है कि टुकड़े स्वयं इस के प्रभारी नहीं हैं।

  2. पासिंग adview के लिए खुद को टुकड़े के बीच, हम अपने पदानुक्रम से प्रत्येक adview अलग करने याद रखने की आवश्यकता:

(केवल निश्चित रूप से यूआई धागे पर):

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

} 
संबंधित मुद्दे