10 votes

Admob sur plusieurs activités ?

J'ai 7 activités dans mon application. Je veux afficher admob dans chaque activité

Dois-je créer chaque AdView dans chaque activité ?

ou

existe-t-il une alternative à la réutilisation du conteneur d'activité précédent ? OU l'empêcher de se détruire Puis-je l'utiliser dans ma prochaine activité ? ....

Tout code ou indice sera apprécié.

Merci

8voto

MicroEyes Points 1890

J'ai fait ça. Merci pour votre commentaire. Ce n'est pas un code efficace. Mais vous pouvez le modifier en conséquence. C'est réduit votre code pour chaque activité .

Juste Étend "TestingAdmobActivity". & appeler SetupAds() pour appeler vos conseillers.

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

Ma première classe d'activité "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);
            }
        });
    }
}

Ma deuxième classe d'activité "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();
            }
        });
    }
}

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

Note : pour des raisons de permissions utilisées par le sdk google admob, je dois le construire sur le sdk Android 4.0 avec min-sdk version 7.

1voto

Vaiden Points 2186

Dans mon application, j'ai un cache de 0 à 12 publicités à un moment donné. Je les réutilise à travers différents fragments dans un ViewPager sans fin. La classe de cache est chargée de charger les publicités et de les fournir aux fragments.

L'astuce est de :

  1. Appelez la fonction onDestory seulement quand vous êtes sûr d'en avoir fini avec cette instance AdView pour de bon. Cela signifie que les Fragments eux-mêmes ne sont pas en charge de cela.

  2. En passant les AdViews eux-mêmes entre les Fragments, nous devons nous rappeler de détacher chaque AdView de sa hiérarchie :

(uniquement sur le fil de l'interface utilisateur, bien sûr) :

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

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X