简体   繁体   中英

Adding Admob Ads to Java file instead of Xml

I'm having trouble adding Admob Ads. First off, I'm developing a game that does not use an xml layout. I just use Java. In the instructions on Google, it looks up the linearlayout id. Any help would be great. Here's the code of my main activity java file that is declared in the Manifest:

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;
import com.google.android.gms.ads.*;

public class CrazyEightsActivity extends Activity {
/** Called when the activity is first created. */
private AdView adView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TitleView tView = new TitleView(this);
    tView.setKeepScreenOn(true);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                         WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);
 // Create the adView.
    adView = new AdView(this);
    adView.setAdUnitId("ca-app-pub-6705249916909813/9815575080");
    adView.setAdSize(AdSize.BANNER);

    // Lookup your LinearLayout assuming it's been given
    // the attribute android:id="@+id/mainLayout".
    LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout);

    // Add the adView to it.
    layout.addView(adView);

    // Initiate a generic request.
    AdRequest adRequest = new AdRequest.Builder().build();

    // Load the adView with the ad request.
    adView.loadAd(adRequest);
  }    
}

Here is the code of my xml layout that's not supposed to be used:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

</LinearLayout>

And here is the code of the java file that I want to be my main content view:

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.view.MotionEvent;
import android.view.View;

public class TitleView extends View {

private Bitmap titleGraphic;
private Bitmap playButtonUp;
private Bitmap playButtonDown;
private int screenW;
private int screenH;
private boolean playButtonPressed;
private Context myContext;

public TitleView(Context context) {
    super(context);
    myContext = context;
    titleGraphic = BitmapFactory.decodeResource(getResources(), R.drawable.title_graphic);
    playButtonUp = BitmapFactory.decodeResource(getResources(), R.drawable.play_button_up);
    playButtonDown = BitmapFactory.decodeResource(getResources(), R.drawable.play_button_down);
}

@Override
public void onSizeChanged (int w, int h, int oldw, int oldh){
    super.onSizeChanged(w, h, oldw, oldh);
    screenW = w;
    screenH = h;
    System.out.println("SCREEN W: " + screenW);
    System.out.println("SCREEN H: " + screenH);
}

@Override 
protected void onDraw(Canvas canvas) {
    canvas.drawBitmap(titleGraphic, (screenW-titleGraphic.getWidth())/2, 0, null);
    if (playButtonPressed) {
        canvas.drawBitmap(playButtonDown, (screenW-playButtonUp.getWidth())/2, (int)(screenH*0.7), null);   
    } else {
        canvas.drawBitmap(playButtonUp, (screenW-playButtonUp.getWidth())/2, (int)(screenH*0.7), null);         
    }
}



 public boolean onTouchEvent(MotionEvent event) {
        int eventaction = event.getAction();   
        int X = (int)event.getX();
        int Y = (int)event.getY();

        switch (eventaction ) {

        case MotionEvent.ACTION_DOWN: 
            if (X > (screenW-playButtonUp.getWidth())/2 &&
                X < ((screenW-playButtonUp.getWidth())/2) + playButtonUp.getWidth() &&
                Y > (int)(screenH*0.7) &&
                Y < (int)(screenH*0.7) + playButtonUp.getHeight()) {
                playButtonPressed = true;
            }                   
            break;

        case MotionEvent.ACTION_MOVE: 
            break;

        case MotionEvent.ACTION_UP:
            if (playButtonPressed) {
                Intent gameIntent = new Intent(myContext, GameActivity.class);
                myContext.startActivity(gameIntent);                    
            }
            playButtonPressed = false;
            break;
        } 
        invalidate();
        return true;      
}
}

First put Google Mobile Ads SDK in to lib folder

after activating your account on Admob , you need to config one application in your acccount. After that application Admob will provide you the Android SDK for Admob containing admob.jar and working example.

private void AdmobFooterInitialize(){
    adView = new AdView(this, AdSize.SMART_BANNER, "Your_AdMobPUBLISHERID");
    LinearLayout layout = (LinearLayout)findViewById(R.id.linear);
    layout.addView(adView);
    AdRequest request = new AdRequest();
    request.addTestDevice("your device id"); // this for testing 
    request.setTesting(false);
    adView.loadAd(request);
}

in your manifest.xml

 <meta-data android:value="true" android:name="ADMOB_ALLOW_LOCATION_FOR_ADS" />
 <activity android:name="com.google.ads.AdActivity"
  android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>

how to get deviceId:-

final TelephonyManager tm =(TelephonyManager)getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);

String deviceid = tm.getDeviceId();

i think this example help for you

I've found out using adMob defining the layout explicitely in a file could be a huge headache generator, as sometimes it might turn impredictable with some parameter and layout combination. What always seems to work is adding the AdView dynamically to some LinearLayout .

This should work:

final LinearLayout yourLayout = (LinearLayout) findViewById(R.id.your_linearlayout_id_where_you_want_to_put_your_adview);

final AdView adView = new AdView(this);
adView.setAdUnitId("your-admob-id");
adView.setAdSize(AdSize.BANNER);

yourLayout.addView(adView);

final AdRequest.Builder adReq = new AdRequest.Builder();
// You should include a line like this for testing purposes,
// but only after you've tested whether your AdView works!
// This will prevent your ad being loaded each time you test
// your ad, so it will prevent you being blocked from AdMob.
// You'll find your device_id in the LogCat.
adReq.addTestDevice("your_device_id");

final AdRequest adRequest = adReq.build();
adView.loadAd(adRequest);

I would configure your TitleView via XML. Eg change your layout to:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<your.titleview.package.name.here.TitleView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

</LinearLayout>

And remove the code that constructs it in onCreate.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM