2014-02-24 41 views
2

我做了一個免費的安卓遊戲,我想爲它添加一個橫幅。我跟着this tutorial,我不知道爲什麼它不起作用。廣告不可見。不令人耳目一新的廣告

當我在LogCat的模擬器上運行我的遊戲時,我看到一條消息「廣告不可見,不刷新廣告」。當我在手機上安裝遊戲時,我也看不到任何廣告。

這裏是我的main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:ads="http://schemas.android.com/apk/res-auto" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 
    <com.google.android.gms.ads.AdView android:id="@+id/adView" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         ads:adUnitId="hidden" 
         ads:adSize="BANNER"/> 
</LinearLayout> 

,這裏是在MainActivity.java代碼

public class MainActivity extends AndroidApplication { 
    private AdView adView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration(); 
     cfg.useGL20 = true; 
     cfg.useAccelerometer = true; 
     cfg.useCompass = true; 

     setContentView(R.layout.main); 

     // Look up the AdView as a resource and load a request. 
     adView = (AdView)this.findViewById(R.id.adView); 
     AdRequest adRequest = new AdRequest.Builder().build(); 
     adView.loadAd(adRequest); 

     initialize (new RedSquare(), cfg); 
    } 

    @Override 
    public void onPause() { 
     adView.pause(); 
     super.onPause(); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     adView.resume(); 
    } 

    @Override 
    public void onDestroy() { 
     adView.destroy(); 
     super.onDestroy(); 
    } 
} 

回答

1

要在libgdx中展示廣告,您需要初始化您的應用以查看。因此,更換這一切:

setContentView(R.layout.main); 

// Look up the AdView as a resource and load a request. 
adView = (AdView)this.findViewById(R.id.adView); 
AdRequest adRequest = new AdRequest.Builder().build(); 
adView.loadAd(adRequest); 

initialize (new RedSquare(), cfg); 

有了這個:

RelativeLayout layout = new RelativeLayout(this); 

requestWindowFeature(Window.FEATURE_NO_TITLE); 
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 
View gameView = initializeForView(new RedSquare(), cfg); 

AdView AdView = new AdView(this); 
AdView.setAdSize(AdSize.SMART_BANNER); 
AdView.setAdUnitId("***"); //The AdUnitId 
AdRequest.Builder adRequest = new AdRequest.Builder(); 
adRequest.addTestDevice("***"); //Your Test device if any 
AdView.loadAd(adRequest.build()); 

layout.addView(gameView); 

RelativeLayout.LayoutParams adParams = 
    new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
        RelativeLayout.LayoutParams.WRAP_CONTENT); 
adParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
adParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 

layout.addView(AdView, adParams); 

setContentView(layout); 
3

我已經找到了使用adMob在文件中明確地定義佈局可能是巨大的頭痛發生器,有時它可能會變得不可預知的一些參數和佈局組合。似乎總能工作的是將AdView動態添加到某些LinearLayout

這應該工作:

final LinearLayout fragLayout = (LinearLayout) inflater.inflate(R.layout.your_layout, container, false); 
final AdView adView = new AdView(getActivity()); 
adView.setAdUnitId("your-admob-id"); 
adView.setAdSize(AdSize.BANNER); 

// Here you'll append the new AdView 
final LinearLayout publiView = (LinearLayout) fragLayout.findViewById(R.id.publi); 
publiView.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); 

---- ----編輯

這個實現是Fragment S,你可能運行的是Activity,這就是爲什麼你得到那些錯誤。

  • 更換getActivity()this

  • inflater簡單(因爲它的名字一樣),膨脹從佈局文件的新LinearLayout。這意味着我已經定義了一個我稱之爲your_layout的佈局,並在LinearLayout內定義。 inflater只是創建一個`LinearLayout的實例。在你的情況下,可能沒有必要。

我加入一個代碼,可能會爲你工作:

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); 
+0

感謝您的答覆。我是新來的Java,我不知道如何解決這個問題...當我嘗試運行你的代碼時,出現了一些錯誤,inflater和getActivity()都是未定義的。你能否寫下我應該把它放到哪裏以便毫無錯誤地編譯它。 – armin

+0

看到我的編輯,希望它有幫助。 – nKn

+0

現在它編譯沒有問題,但是當我嘗試運行遊戲後它開始後崩潰。 :( – armin

0

沒有什麼特別不對您的佈局。雖然我可能會改變layout_width爲AdView的是:

android:layout_width="match_parent" 

但目前尚不清楚是什麼

initialize (new RedSquare(), cfg); 

是幹什麼的?我懷疑它正在改變佈局。

相關問題