2012-04-19 31 views
9

Tôi có 7 Hoạt động trong đơn đăng ký của mình. Tôi muốn hiển thị admob trong mọi hoạt độngAdMob trên nhiều hoạt động?

Tôi có phải tạo mỗi AdView trong mọi hoạt động không?

hoặc

có bất kỳ thay thế để tái sử dụng thùng chứa hoạt động trước đó HOẶC ngăn chặn nó phá hủy vì vậy tôi có thể sử dụng trong hoạt động tiếp theo ....

Bất kỳ mã hoặc gợi ý chúng tôi sẽ b đánh giá cao.

Thankx

+0

Tạo siêu lớp AdAwareActivity, thiết lập/xé nhỏ chế độ xem Quảng cáo của bạn trong onCreate()/onDestroy(), sau đó trong mọi Hoạt động yêu cầu chức năng Quảng cáo, mở rộng AdAwareActivity. – yorkw

+0

Tôi rất muốn biết câu trả lời cho câu hỏi này vì tôi cũng đang cố gắng tìm ra cùng một vấn đề :) – Anshul

Trả lời

8

TÔI ĐÃ này. Thankx to yorkw bình luận. Đây không phải là một mã hiệu quả. Nhưng bạn có thể sửa đổi cho phù hợp. Điều đó làm giảm mã của bạn cho mỗi hoạt động.

Chỉ Mở rộng "TestingAdmobActivity" & gọi SetupAds() gọi advs của bạn.

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

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

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

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

Lưu ý: vì lợi ích của quyền được sử dụng bởi Google AdMob SDK, tôi phải xây dựng này trên android 4.0 sdk với phiên bản min-sdk 7

+1

Câu trả lời hay nhất – Anshul

+6

Tôi hơi bối rối .. Làm cách nào để sử dụng lại vùng chứa quảng cáo này? – States

+3

Bạn đang sử dụng lại mã không chứa vùng chứa quảng cáo. Cái này hoạt động ra sao? Trong khi tạo Activity_2, bạn không sử dụng lại AdView được tạo bởi Activity_1. – Htaras

1

Trong ứng dụng của tôi, tôi có bộ nhớ cache là 0,12 quảng cáo tại bất kỳ thời điểm nào. Tôi đang sử dụng lại chúng trên các mảnh vỡ khác nhau trong một ViewPager vô tận. Lớp bộ nhớ đệm chịu trách nhiệm tải việc cung cấp quảng cáo cho các Phân đoạn.

Bí quyết là:

  1. Gọi của onDestory chỉ khi bạn chắc chắn rằng bạn đang thực hiện với điều đó dụ AdView cho tốt AdView. Điều này có nghĩa rằng bản thân các mảnh vỡ không chịu trách nhiệm về điều này.

  2. Thông qua việc tự của AdView giữa mảnh vỡ, chúng ta cần phải nhớ để tách từng AdView từ hệ thống cấp bậc của nó:

(chỉ trên thread UI tất nhiên):

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

} 
Các vấn đề liên quan