Beim Ausprobieren der Google Places-API erhalte ich die folgende Ausnahme, um Wahrscheinlichkeitsstellen für Current Place in Android zu erhalten.
Process: me.nabeelkottol.linkedinplaces, PID: 2995
com.google.Android.gms.tasks.RuntimeExecutionException:
com.google.Android.gms.common.api.ApiException: 13: ERROR
at com.google.Android.gms.tasks.zzn.getResult(Unknown Source)
at
me.nabeelkottol.linkedinplaces.MainActivity$1.onComplete(MainActivity.Java:71)
at com.google.Android.gms.tasks.zzf.run(Unknown Source)
at Android.os.Handler.handleCallback(Handler.Java:739)
at Android.os.Handler.dispatchMessage(Handler.Java:95)
at Android.os.Looper.loop(Looper.Java:148)
at Android.app.ActivityThread.main(ActivityThread.Java:5417)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:726)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:616)
Caused by: com.google.Android.gms.common.api.ApiException: 13: ERROR
at com.google.Android.gms.common.internal.zzb.zzz(Unknown Source)
at com.google.Android.gms.common.internal.zzbk.zzaa(Unknown Source)
at com.google.Android.gms.common.internal.zzbl.zzs(Unknown Source)
at com.google.Android.gms.common.api.internal.zzs.zzc(Unknown Source)
at com.google.Android.gms.common.api.internal.zzs.setResult(Unknown Source)
at com.google.Android.gms.location.places.zzm.zzao(Unknown Source)
at com.google.Android.gms.location.places.internal.zzx.onTransact(Unknown Source)
at Android.os.Binder.execTransact(Binder.Java:453)
das ist mein Code:
try {
Task<PlaceLikelihoodBufferResponse> placeResult = mPlaceDetectionClient.getCurrentPlace(null);
placeResult.addOnCompleteListener(new OnCompleteListener<PlaceLikelihoodBufferResponse>() {
@Override public void onComplete(@NonNull Task<PlaceLikelihoodBufferResponse> task) {
PlaceLikelihoodBufferResponse likelyPlaces = task.getResult();
for (PlaceLikelihood placeLikelihood : likelyPlaces) {
Log.i(TAG,
String.format("Place '%s' has likelihood: %g", placeLikelihood.getPlace().getName(),
placeLikelihood.getLikelihood()));
}
likelyPlaces.release();
}
});
} catch (SecurityException e) {
e.printStackTrace();
}
Hier gibt mir die Zeile PlaceLikelihoodBufferResponse likelyPlaces = task.getResult();
den Fehler.
Ich habe einen API key
für die Android-App erstellt, indem ich den Paketnamen und den SHA-1-Schlüssel zum Debuggen von Google API console
angegeben habe. Und enabled Google Places API for Android
im Abschnitt libraries
. es ist immer noch derselbe Fehler. Weiß nicht, was an der Implementierung falsch ist. Bitte hilf mir.
In github wurde darüber ein issue berichtet.
Dies ist mein app/build.gradle
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 26
defaultConfig {
applicationId "me.nabeelkottol.linkedinplaces"
minSdkVersion 16
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.Android.support:appcompat-v7:26.1.0'
implementation 'com.Android.support.constraint:constraint-layout:1.0.2'
compile 'com.google.Android.gms:play-services-places:11.6.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.Android.support.test:runner:1.0.1'
androidTestImplementation 'com.Android.support.test.espresso:espresso-core:3.0.1'
}
Dies ist mein AndroidManifest.xml
.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="me.nabeelkottol.linkedinplaces">
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission Android:name="Android.permission.INTERNET"/>
<application
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:roundIcon="@mipmap/ic_launcher_round"
Android:supportsRtl="true"
Android:theme="@style/AppTheme">
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="My API Key here"/>
<activity Android:name=".MainActivity">
<intent-filter>
<action Android:name="Android.intent.action.MAIN"/>
<category Android:name="Android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
Fügen Sie den folgenden Code im Manifest hinzu
<meta-data
Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version" />
Ich hatte das gleiche Problem. Ich konnte es lösen, indem ich Google Orte für Api von der Google-Konsole aus aktiviert und Orte für API-Schlüssel hinzufügte. Sobald Sie die Places-API aktivieren, werden Sie automatisch aufgefordert, einen API-Schlüssel hinzuzufügen. Folgen Sie einfach den Anweisungen.
Fügen Sie dann den API-Schlüssel in Ihre Manifestdatei ein.
<application
...
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="YOUR_API_KEY" />
</application>
In Ihrem Emulator sollten außerdem die neuesten Google Play-Dienste installiert sein. Verwenden Sie sonst zum Testen ein echtes Android-Gerät.
Sie können eine Diskussion hier zu diesem Thema sehen. Für mich ist das Problem auf dem Emulator aufgetreten, aber es funktionierte auf einem physischen Gerät.
OK. Ich hoffe, Sie mussten nicht so viel Zeit verlieren wie ich, um das herauszufinden. Damit die Antwort von @Umar Ata funktioniert, müssen Sie beide Metadaten-Tags in Ihre Manifestdatei einfügen. Also sollte es so gehen.
<application>
...
<meta-data
Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version" />
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="PASTE_YOUR_API_KEY_HERE" />
...
</application>
Und selbst nachdem ich alles richtig gemacht hatte, gab es eine Fehlermeldung: PLACES_API_ACCESS_NOT_CONFIGURED 9003 Ich wurde behoben, indem ich Places SDK für Android aktivierte und die Dinge endlich gut wurden.
Diese Ausnahme trat auch auf, wenn die Standorteinstellungen deaktiviert waren. Stellen Sie vor dem Aufruf der API sicher, dass Sie die Standortdienste aktiviert haben.
Nun, in meinem Fall beide com.google.Android.gms.version
und com.google.Android.geo.API_KEY
wurden bereits im Manifest hinzugefügt. Warum ist dieser Fehler aufgetreten, weil ich mein Projekt auf ein neues System umgestellt habe? Der sha1-Schlüssel stimmte nicht mit der Liste überein.
Was ich getan habe, um diesen Fehler zu beheben, ist: Ich habe einen neuen SHA1 von meinem neuen System generiert und diesen SHA1 unter hinzugefügt
credentials => API Key => dann Add package name und SHA1
von Setzt SDK für Android
Stellen Sie sicher, dass Sie die folgenden Metadaten in Ihre Manifestdatei eingefügt haben.
<application
...
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="YOUR_API_KEY" />
</application>
Überprüfen Sie auch die API-Einschränkungen in Ihrer Google API-Konsole. Wenn Sie eine API-Einschränkung für API_KEY aktiviert haben, funktioniert sie nur für die bestimmte API. Sie müssen Places SDK for Android
unter API-Einschränkungen hinzufügen.
Bitte versuchen Sie es mit der Hoffnung, damit es funktioniert.
1) Bitte aktualisieren Sie Ihre\sdk\extras\google\google_play_services und versuchen Sie es erneut.
2) Wenn Sie Proguard verwenden, schließen Sie bitte Google-Klassen von der Verschleierung in proguard-rules.pro aus:
-keep public class com.google.** {*;}
3) Versionen von Play-Services-Bibliotheken sollten gleich sein, zum Beispiel:
compile 'com.google.Android.gms:play-services-maps:11.6.0'
compile 'com.google.Android.gms:play-services-gcm:11.6.0'
4) Ich hatte dieses Problem nur, aber ich habe es gelöst, indem ich die Gradle-Version so heruntergestuft habe:
Alte, lästige Version:
classpath 'com.Android.tools.build:gradle:2.2.0-rc2'
Feste Version:
classpath 'com.Android.tools.build:gradle:2.3.3'
vergessen Sie nicht, die folgende Abhängigkeit in der Gradle-Datei auf Projektebene hinzuzufügen.
dependencies {
classpath 'com.Android.tools.build:gradle:2.3.3'
classpath 'com.google.gms:google-services:3.1.0'
}