2012-04-19 2 views
9

신청서에 7 가지 활동이 있습니다. 내가 원하는 모든 활동에 admob 표시여러 활동에 대한 AdMob?

모든 활동마다 각 AdView를 만들어야합니까?

또는

그래서 난 다음 활동 ....

코드 또는 우리는거야 힌트에서 사용할 수있는 파괴에서 또는 그것을 방지 이전 활동 컨테이너를 재사용 할 수있는 대안이 B는 감사한다.

감사의 말

+0

는 만들기 조각 사이에서 AdView의 자신, 우리는 그 계층 구조에서 각로 AdView를 분리 기억할 필요가 전달

  • Super class AdAwareActivity는 onCreate()/onDestroy()에서 광고보기를 올바르게 설정/해제 한 다음 Ad 기능이 필요한 모든 활동에서 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 SDK에서이 작업을 구축해야 7

    +1

    위대한 멋진 대답 – Anshul

    +6

    나는 조금 혼란 스럽다. 이것은 어떻게 광고 컨테이너를 재사용 하는가? – States

    +3

    광고 컨테이너가 아닌 코드를 다시 사용하고 있습니다. 이게 어떻게 작동합니까? Activity_2를 만드는 동안 Activity_1에서 만든 AdView를 다시 사용하지 않습니다. – Htaras

    1

    내 응용 프로그램에서 나는 주어진 시간에 0..12 광고의 캐시가 있습니다. 끝없는 ViewPager에서 다른 조각들을 재사용하고 있습니다. 캐싱 클래스는 프래그먼트에 광고를로드하는 것을 담당합니다.

    트릭은에 :

    1. 를 호출에서 AdView의 onDestory 당신은 당신이 영원히 그 AdView가 인스턴스가 완료 확실 경우에만 사용할 수 있습니다. 이것은 단편 자체가 이것을 담당하지 않는다는 것을 의미합니다.

    (단지 과정의 UI 스레드에서) :

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