Jur*_*cik 14 android admob libgdx google-play-services
我有一个问题.我的AdMob已经设置了一段时间没有任何问题,但我注意到了一些错误.广告已成功加载(我看到来自ddms的消息),但它不会显示.它将在定期60秒刷新后或当我打开登录google plus时显示.问题仅发生在Google Play服务AdMob上,而不是AdMobSDK jar.我将切换到AdMob jar,但我正在使用Google Play游戏服务获取排行榜和成就.
我怀疑问题是视图没有显示,或者设置不正确.
再次,广告将在60秒(以及广告刷新)等待后显示自己,或者当我启动谷歌播放服务的登录屏幕时.
我正在添加我的代码,同时我应该提到我已切换到新的AdMob网站,我再说一遍,如果我使用AdMob jar文件,那么问题就不会发生(广告会像正常情况一样在2-3秒内显示).我已经削减了谷歌游戏服务代码(他们不会影响这个问题,因为我已经尝试了没有他们的我的其他应用程序,问题仍然存在).
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);
}
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
这是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>
Run Code Online (Sandbox Code Playgroud)
编辑: 好的,所以广告在应用程序打开后锁定和解锁屏幕后可见,您也可以点击不可见的广告
编辑: 好的,我想我解决了.我只是手动重新加载整个布局onAdLoad事件.无论如何,这只是功能性解决方案,它无法解释为什么它会发生在Google Play Services AdMob上.
adMobView.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
super.onAdLoaded();
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
layout.requestLayout();
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
由于没有人回复解释,我会考虑解决这个问题.我只是手动重新加载整个布局onAdLoad事件.无论如何,这只是功能性解决方案,它无法解释为什么它会发生在Google Play Services AdMob上.
adMobView.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
super.onAdLoaded();
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
layout.requestLayout();
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
另外,如user3263204所述,您可以试试这个
adMobView.setBackgroundColor(Color.BLACK);
Run Code Online (Sandbox Code Playgroud)
解决你的问题.
以上解决方案有效.即使是更简单的方法来保持横幅显示也是为了设置背景.
adMobView.setBackgroundColor(Color.BLACK);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9116 次 |
| 最近记录: |