android 中的 Admob SMART_BANNER 在横向模式下无法正常工作

Admob SMART_BANNER in android is not working when orientation is in Landscape mode

我在 android 应用程序中使用 Admob SMART_BANNER。该应用程序在设备处于纵向模式时显示。但是,如果设备方向处于横向模式,则不会显示添加。我知道如果没有足够的 space 来显示添加,则不会显示横幅添加。但在我的例子中,它似乎有足够的 space 来显示一个添加。这是我的代码:

activity_main.xml 文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView android:text="@string/hello_world"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="15dp"/>

    <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        ads:adSize="SMART_BANNER"
        ads:adUnitId="@string/banner_ad_unit_id">
    </com.google.android.gms.ads.AdView>


</RelativeLayout>

strings.xml 值文件夹中的文件:

<resources>
    <string name="app_name">Banner Example</string>

    <string name="banner_ad_unit_id">ca-app-pub-3940256099942544/6300978111</string>

</resources>

Java代码:

TelephonyManager tManager = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
       String uid = tManager.getDeviceId();

        AdView mAdView = (AdView) findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder`enter code here`()
                .addTestDevice(uid)
                .build();
        mAdView.loadAd(adRequest);
try this below code

private void showBannerAd()
{
    AdView adView = new AdView(HomeActivity.this);
    //cal method to show banner add

    if(getResources().getConfiguration().orientation == 
    Configuration.ORIENTATION_LANDSCAPE)
    {
        adView.setAdSize(AdSize.BANNER);
    }
    else
    {
        adView.setAdSize(AdSize.SMART_BANNER);
    }

    adView.setAdUnitId("AD_ID");
    AdRequest adRequest = new
     AdRequest.Builder().addTestDevice(Secure.getString(getContentResolver()  
    ,Secure.ANDROID_ID)).build();
    adView.loadAd(adRequest);
}

您可以根据设备的屏幕分辨率动态加载广告尺寸:

 AdSize adSize = AdSize.SMART_BANNER;  

    DisplayMetrics dm = getResources().getDisplayMetrics();  
    double density = dm.density * 160;
    double x = Math.pow(dm.widthPixels / density, 2);
    double y = Math.pow(dm.heightPixels / density, 2);
    double screenInches = Math.sqrt(x + y);   
    if (screenInches > 8) { // > 728 X 90
        adSize = AdSize.LEADERBOARD;
    } else if (screenInches > 6) { // > 468 X 60
        adSize = AdSize.MEDIUM_RECTANGLE;
    } else { // > 320 X 50
        adSize = AdSize.BANNER;
    }

   AdView mAdView = (AdView) findViewById(R.id.adView);
     mAdView.setAdUnitId(yourAdUnitHere); 
     mAdView.setAdSize(adSize);
    AdRequest adRequest = new AdRequest.Builder().build();
     mAdView.loadAd(adRequest);

这可能不适用于原始问题,但我想分享我对 SMART_BANNER 不起作用的情况的解决方案。

我发现在我的例子中 SMART_BANNER 想要占据屏幕的 整个宽度 而不管方向是横向还是纵向。我把 AdView 放在底部。如果它位于占屏幕宽度 80% 的列中,则它既不会显示也不会抱怨(即不调用 onAdFailedToLoad)。它只是隐藏起来。占据整个宽度后,广告将毫无问题地展示。