简体   繁体   English

将Admob Ads添加到Java文件而不是Xml

[英]Adding Admob Ads to Java file instead of Xml

I'm having trouble adding Admob Ads. 我在添加Admob广告时遇到问题。 First off, I'm developing a game that does not use an xml layout. 首先,我正在开发一个不使用xml布局的游戏。 I just use Java. 我只是用Java。 In the instructions on Google, it looks up the linearlayout id. 在Google的说明中,它会查找linearlayout ID。 Any help would be great. 任何帮助都会很棒。 Here's the code of my main activity java file that is declared in the Manifest: 这是清单中声明的​​主要活动java文件的代码:

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布局的代码:

<?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: 这是我想成为主要内容视图的java文件的代码:

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 首先将Google Mobile Ads SDK放入lib文件夹

after activating your account on Admob , you need to config one application in your acccount. Admob上激活帐户后,您需要在帐户中配置一个应用程序。 After that application Admob will provide you the Android SDK for Admob containing admob.jar and working example. 在该应用程序之后,Admob将为您提供包含admob.jar和示例的Admob Android SDK。

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 在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:- 如何获取deviceId:-

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

String deviceid = tm.getDeviceId(); 字符串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. 我发现使用adMob在文件中显式定义布局可能会产生巨大的麻烦,因为有时使用某些参数和布局组合可能会变得难以预测。 What always seems to work is adding the AdView dynamically to some LinearLayout . 似乎总是可行的是将AdView动态添加到一些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. 我将通过XML配置您的TitleView。 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. 并删除在onCreate中构造它的代码。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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