Ich habe dies in meiner Haupt-XML-Datei:
<com.google.Android.gms.ads.AdView
xmlns:ads="http://schemas.Android.com/apk/lib/com.google.ads"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
ads:adUnitId="******************"
ads:adSize="BANNER"
Android:id="@+id/adView"/>
Ich habe bereits die Anzeigengröße und die Einheiten-ID festgelegt, aber wenn dies ausgeführt wird (von MainActivity.Java),
AdView adView = (AdView)this.findViewById(com.example.lovetestactual.R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
adView.loadAd(adRequest);
Es warf eine Ausnahme von dem, was im Titel steht.
Ich habe im github-Beispiel eine Lösung gefunden, nämlich:
anstatt von
xmlns:ads="http://schemas.Android.com/apk/lib/com.google.ads"
löschen Sie das xmlns: ads *** -Tag und fügen Sie es hinzu
xmlns:ads="http://schemas.Android.com/apk/res-auto"
tag zu Ihrem LinearLayout-Tag wie folgt:
<?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">
<TextView Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="@string/hello"/>
<com.google.Android.gms.ads.AdView Android:id="@+id/adView"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
ads:adSize="BANNER"
ads:adUnitId="INSERT_YOUR_AD_UNIT_ID_HERE"/>
</LinearLayout>
Das ist es :)
Warnung: Stellen Sie sicher, dass Sie die Anzeigengröße und die Anzeigenblock-ID auf dieselbe Weise festlegen (d. H. Beide in XML oder beide programmgesteuert festlegen).
Viele Leute, die vorhandene Anwendungen auf die Google Play Services-Methode migrieren, fügen fälschlicherweise die falschen Informationen hinzu.
Ich möchte darauf hinweisen, dass viele Personen mit der gleichen Frage dies als Vorlage verwendet haben
<com.google.Android.gms.ads.AdView
xmlns:ads="http://schemas.Android.com/apk/lib-auto"
Android:id="@+id/adView"
Android:layout_width="match_parent"
Android:layout_height="50dp"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX"
ads:loadAdOnCreate="true" >
</com.google.Android.gms.ads.AdView>
Dies ist falsch, da xmlns: ads geändert werden sollte in: - xmlns:ads="http://schemas.Android.com/apk/res-auto"
Wie so
<com.google.Android.gms.ads.AdView
xmlns:ads="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/adView"
Android:layout_width="match_parent"
Android:layout_height="50dp"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX"
ads:loadAdOnCreate="true" >
</com.google.Android.gms.ads.AdView>
Dies wird vage sein, da Sie nicht angegeben haben, welche Art von Ansicht Ihre XML-Datei hat (Relativ, Linear usw.).
In meiner Anwendung mit einem scrollbaren relativen Layout habe ich Folgendes aufgenommen:
<RelativeLayout
Android:id="@+id/test"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_below="@+id/TextView07"
Android:paddingTop="20dp" >
</RelativeLayout>
Jetzt in meiner aktuellen Klasse, in der ich nicht die Anzeige sehen möchte, die ich aufgenommen habe:
private AdView adView;
/* Your ad unit id. Replace with your actual ad unit id. */
private static final String AD_UNIT_ID = "ca-app-pub-xxxxxx/yyyyyy";
/**
* Simply loads the xml about page layout to display the text.
*/
public void onCreate(Bundle start) {
super.onCreate(start);
setContentView(R.layout.about);
final TelephonyManager tm = (TelephonyManager) getBaseContext()
.getSystemService(Context.TELEPHONY_SERVICE);
//String deviceid = tm.getDeviceId();
adView = new AdView(this);
adView.setAdSize(AdSize.SMART_BANNER);
adView.setAdUnitId(AD_UNIT_ID);
// Add the AdView to the view hierarchy. The view will have no size
// until the ad is loaded.
RelativeLayout layout = (RelativeLayout) findViewById(R.id.test);
layout.addView(adView);
// Create an ad request. Check logcat output for the hashed device ID to
// get test ads on a physical device.
AdRequest adRequest = new AdRequest.Builder()
.build();
//.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
//.addTestDevice(deviceid).build();
// Start loading the ad in the background.
adView.loadAd(adRequest);
}
Idealerweise möchten Sie jetzt ein intelligentes Banner verwenden, um Ihr Layout für alle Geräte zu optimieren, wie oben beschrieben. Dies ist jetzt Standard.
Wenn dies keine Hilfe ist, gehen Sie zu hier
entferne xmlns:ads="http://schemas.Android.com/tools"
aus der Root-Ansicht
fügen Sie dann AdView hinzu
<com.google.Android.gms.ads.AdView
xmlns:ads="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/adView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerHorizontal="true"
Android:layout_alignParentBottom="true"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
</com.google.Android.gms.ads.AdView>
Merke dir diese Schritte:
Sie können xmlns:ads="http://schemas.Android.com/apk/res-auto"
In der Root-Ansicht selbst definieren.
wenn Sie in rootView nicht xmlns:ads="http://schemas.Android.com/apk/res-auto"
definiert haben, müssen Sie in AdView.xmlns:ads="http://schemas.Android.com/apk/res-auto"
hinzufügen
wenn Sie adSize in Ihrer AdView
xml-Datei definiert haben, legen Sie es nicht dynamisch fest, wie z. B .: adView.setAdSize(AdSize.BANNER);
, sonst wird es durch eine Ausnahme Java.lang.IllegalStateException: The ad size can only be set once on AdView.
xmlns:ads="http://schemas.Android.com/apk/res-auto"
Und xmlns:app="http://schemas.Android.com/apk/res-auto"
Sehen gleich aus, aber es gibt einen Unterschied: xmlns: ads und xmlns: app .
Ich denke, es wird Ihr Problem lösen ... Gerne helfen :)
Ich habe versucht, die Namespace-Deklaration zu ändern, aber es funktioniert einfach nicht. Ich habe dies behoben, indem ich anstelle von wrap_content
Einen Höhenwert für das AdView angegeben habe. Für mich geht das
<com.google.Android.gms.ads.AdView
Android:id="@+id/adView2"
Android:layout_width="match_parent"
Android:layout_height="50dp"
Android:layout_alignParentBottom="true"
Android:layout_centerHorizontal="true"
Android:layout_gravity="center|bottom"
ads:adSize="BANNER"
ads:adUnitId="@string/banner_ad_unit_id" />
Ich hatte das gleiche Problem, weil ich diese Zeile nicht oben auf xmlns:ads="http://schemas.Android.com/apk/res-auto"
Hinzufüge. Dann ändere ich meinen XML-Code so
<com.google.Android.gms.ads.AdView
xmlns:ads="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/adView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
ads:layout_constraintLeft_toLeftOf="parent"
ads:layout_constraintRight_toRightOf="parent"
ads:layout_constraintTop_toTopOf="parent"
ads:layout_constraintBottom_toTopOf="@+id/headerText"
Android:layout_marginTop="@dimen/_2sdp"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-3940256099942544/6300978111"
Android:visibility="visible">
</com.google.Android.gms.ads.AdView>
danach füge ich diese 3 Zeilen in die onCreate-Methode ein
AdView mAdView = (AdView)findViewById(R.id.adView);
MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713");
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);