2014-01-28 25 views
14

我有问题。我的AdMob已经设置了一段时间,没有任何问题,但我注意到了一些错误。广告获得成功加载(我看到来自ddms的消息),但它不会显示。它会在定期刷新60秒后或者当我打开Goog​​le plus登录时显示。问题只发生在Google Play服务AdMob中,而不是AdMobSDK jar中。我会切换到AdMob jar,但是我使用Google Play游戏服务获得排行榜和成就。AdMob将不会显示横幅,直到刷新或登录谷歌加

我怀疑问题是与图中未示,或inproper设置。

如此反复,广告会等待,或者当我在屏幕火起来的日志,谷歌播放服务60秒(与广告一起刷新)后脱颖而出。

我加入我的代码,同时我要指出,我已经切换到新的AdMob网站,我再说一遍,这个问题是不会发生,如果我使用AdMob jar文件(该广告,然后在2-3秒内出像正常)。我已经削减了Google Play游戏服务代码(它们不会影响这个问题,因为我在其他应用程序中尝试了它们,但问题仍然存在)。

MainActivity代码:

public class MainActivity extends AndroidApplication { 

public static enum AdsStatus { 
    SHOW_ADS, HIDE_ADS; 
} 

protected RelativeLayout layout; 

protected static AdView adMobView; 

public static class InnerHandler extends Handler { 
    WeakReference<MainActivity> mActivity; 

    InnerHandler(MainActivityactivity) { 
     mActivity = new WeakReference<MainActivity>(activity); 
    } 

    @Override 
    public void handleMessage(final Message msg) { 
     if(msg.obj instanceof AdsStatus) { 
      switch((AdsStatus)msg.obj) { 
       case SHOW_ADS: 
        mActivity.get().showAds(); 
        break; 
       case HIDE_ADS: 
        mActivity.get().hideAds(); 
        break; 
      } 
     } 
    } 
} 
protected Handler handler = new InnerHandler(this); 

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

    // Create the layout 
    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); 

    // Create the libgdx View 
    View gameView = initializeForView(new MainApplicationListener(), true); 
    layout.addView(gameView); 

    //Ad Mob 
    final DisplayMetrics displayMetrics = MainActivity.this 
      .getApplicationContext().getResources() 
      .getDisplayMetrics(); 

    if (displayMetrics.widthPixels >= 800 && displayMetrics.heightPixels >= 480) { 
     if(adMobView != null) { 
      adMobView.destroy(); 
     } 

     adMobView = new AdView(AirDance.this); 
     adMobView.setAdUnitId(<MY_ID_IS_HERE>); 
     adMobView.setAdSize(AdSize.SMART_BANNER); 

     RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(
       RelativeLayout.LayoutParams.WRAP_CONTENT, 
       RelativeLayout.LayoutParams.WRAP_CONTENT); 
     adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
     adParams.addRule(RelativeLayout.CENTER_HORIZONTAL); 

     AdRequest adRequest = new AdRequest.Builder() 
          .addTestDevice(<MY_DEVICE_IS_HERE>) 
          .build(); 
     adMobView.loadAd(adRequest); 

     layout.addView(adMobView, adParams); 
    } 

    // Hook it all up 
    setContentView(layout); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 

    AppRater.applicationLaunched(this, analytics); 

    if(adMobView != null) { 
     adMobView.resume(); 
    } 
} 

@Override 
protected void onPause() { 
    super.onPause(); 

    if(adMobView != null) { 
     adMobView.pause(); 
    } 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 

    if(adMobView != null) { 
     adMobView.destroy(); 
     adMobView = null; 
    } 
} 

public void showAds() { 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      if(adMobView != null) { 
       adMobView.setEnabled(true); 
       adMobView.setVisibility(View.VISIBLE); 
      } 
     } 
    }); 
} 

public void hideAds() { 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      if(adMobView != null) { 
       adMobView.setEnabled(false); 
       adMobView.setVisibility(View.GONE); 
      } 
     } 
    }); 
} 
} 

这里是AndroidManifest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="..." 
    android:installLocation="auto" 
    android:versionCode="16" 
    android:versionName="1.2.6" > 

    <uses-sdk 
     android:minSdkVersion="9" 
     android:targetSdkVersion="17" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-feature android:name="android.hardware.screen.landscape"/> 
    <uses-feature android:name="android.hardware.touchscreen.multitouch" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="MainActivity"> 

     <meta-data android:name="com.google.android.gms.games.APP_ID" 
      android:value="@string/app_id" /> 

     <meta-data android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version" /> 

     <activity 
      android:name="...MainActivity" 
      android:label="MainActivity" 
      android:screenOrientation="landscape"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <!-- adMob --> 
     <activity android:name="com.google.android.gms.ads.AdActivity" 
      android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/> 
    </application> 
</manifest> 

编辑: 好,所以广告获得可见后我锁定和解锁屏幕,应用程序打开时,你也可以点击隐形广告

编辑: 好吧,我想我解决了它。我只是手动重新加载整个布局onAdLoad事件。无论如何,这只是功能性解决方案,并不能解释Google Play 服务AdMob发生的原因。

adMobView.setAdListener(new AdListener() { 

    @Override 
    public void onAdLoaded() { 
     super.onAdLoaded(); 

     MainActivity.this.runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       layout.requestLayout(); 
      } 
     }); 
    } 

}); 
+0

欢迎!通常我们会尽量避免问题中的谢谢标语让他们更整洁,您可以在这里阅读为什么:“[应该'嗨','谢谢',标语和致敬从帖子中删除?](http:// meta。 stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts)”。 – veducm

+1

好的,谢谢!我不知道。 –

+1

这也适用于我。谢谢 –

回答

8

由于没有人回答解释,我会考虑解决这个问题。我只是手动重新加载整个布局onAdLoad事件。无论如何,这只是功能性解决方案,并不能解释Google Play服务AdMob出现的原因。

adMobView.setAdListener(new AdListener() { 

    @Override 
    public void onAdLoaded() { 
     super.onAdLoaded(); 

     MainActivity.this.runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       layout.requestLayout(); 
      } 
     }); 
    } 

}); 

此外,由user3263204提到的,你可以试试这个

adMobView.setBackgroundColor(Color.BLACK); 

解决您的问题。

5

上述解决方案的工作原理。即使更简单的方式来保持显示的横幅是设置其背景。

adMobView.setBackgroundColor(Color.BLACK); 
1

由于user3263204说,你可以使用setBackgroundColor使AD浏览出现。 可以使背景透明,如果(在我的情况)你有AD浏览过别的东西:

adMobView.setBackgroundColor(getResources().getColor(android.R.color.transparent));

0

你也可以requestWindowFeature(Window.FEATURE_NO_TITLE);并设置为全屏并显示广告。

0
banner.setBackgroundColor(Color.TRANSPARENT); 

这似乎解决了我的问题。另外请确保从UI线程内运行横幅创建代码。

activity.runOnUiThread(new Runnable() 
{ 
    @Override 
    public void run() 
    { 
     // all your banner creation code is here 
     banner.setBackgroundColor(Color.TRANSPARENT); 
    } 
});