2012-04-19 36 views
9

我在我的应用程序中有7个活动。我想显示admob在每个活动关于多项活动的Admob?

是否我必须在每个活动中创建每个AdView?

没有任何替代重用以前活动容器 OR 防止其破坏所以我可以在接下来的活动....

任何代码或提示我们将使用b感谢。

谢谢x

+0

创建超级AdAwareActivity,在onCreate()/ onDestroy()中正确设置/拆除广告视图,然后在需要广告功能的每个活动中扩展AdAwareActivity。 – yorkw 2012-04-19 21:33:53

+0

我很想知道这个问题的答案,因为我也试图找出相同的问题:) – Anshul 2012-04-20 06:57:45

回答

8

我做到了。 Thankx对yorkw发表评论。这不是一个有效的代码。但是你可以相应地修改。那减少您的代码为每个活动

只是伸出 “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的使用权限的缘故,我要建立这个在Android 4.0 SDK与最小SDK版本7

+1

很好的答案 – Anshul 2012-04-20 08:11:30

+6

我有点困惑......这是如何重用广告容器? – States 2012-10-22 23:39:33

+3

您正在重复使用代码而非广告容器。这个怎么用?在创建Activity_2时,您不会重复使用由Activity_1创建的AdView。 – Htaras 2013-01-03 12:14:48

1

在我的应用程序中,我有一个0..12广告缓存在任何给定的时间。我在无尽的ViewPager中重复使用它们在不同的碎片中。缓存类负责将广告提供给碎片。

诀窍是:

  1. 呼叫AdView中的onDestory只有当你确定你有好的是AdView的情况下完成的。这意味着碎片本身并不负责这一点。

  2. 传递AdView中的自己的片段之间,我们需要记住,从它的层次分离的每个的AdView:

(仅在课程的UI线程):

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

}