Ответ 1
Добавьте нижеприведенный код в манифест
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
Я получаю следующее исключение при опробовании API google places, чтобы получить места вероятностей для текущего места в android.
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)
это мой код:
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();
}
Здесь строка PlaceLikelihoodBufferResponse likelyPlaces = task.getResult();
дает мне ошибку.
Я создал API key
для приложения Android, указав имя пакета и SHA-1 для отладки с Google API console
. И enabled Google Places API for android
в разделе libraries
. тем не менее, он дает ту же ошибку. Не знаю, что не так с реализацией. Пожалуйста, помогите мне.
Существует проблема сообщили в GitHub относительно этого.
Это мое 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'
}
Это мой 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>
Добавьте нижеприведенный код в манифест
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
У меня была такая же проблема, я смог ее разрешить, включив Google в Api из консоли Google и добавив api-ключ. Как только вы включите Places api, он автоматически попросит вас добавить ключ api, просто следуйте инструкциям.
Затем добавьте ключ API в файл манифеста.
<application
...
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="YOUR_API_KEY" />
</application>
Кроме того, на вашем эмуляторе должны быть установлены последние службы Google Play. Else используют настоящие Android-устройства для тестирования.
Вы можете увидеть обсуждение здесь по этому вопросу. Для меня проблема возникла на эмуляторе, но он работал на физическом устройстве.
ХОРОШО. Надеюсь, вам не пришлось тратить столько времени, как я, чтобы это выяснить. Но чтобы получить ответ @Umar Ata, вам нужно поместить оба тега метаданных в файл манифеста. Так и должно быть.
<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>
И даже после того, как все получилось правильно, это дало мне ошибку: PLACES_API_ACCESS_NOT_CONFIGURED 9003, которую я исправил, включив Places SDK для Android, и все наконец выздоровело.
Пожалуйста, попробуйте следующую надежду, чтобы она работала.
1) пожалуйста, обновите свои \sdk\extras\google\google_play_services и повторите попытку.
2) Если вы используете proguard, пожалуйста, исключите классы google из обфускации, подобные этому в proguard-rules.pro:
-keep public class com.google.** {*;}
3) Версии игровых сервисов libs должны быть равны, например:
compile 'com.google.android.gms:play-services-maps:11.6.0'
compile 'com.google.android.gms:play-services-gcm:11.6.0'
4) У меня только была эта проблема, но она решила ее, понизив версию градиента так:
Старая, неприятная версия:
classpath 'com.android.tools.build:gradle:2.2.0-rc2'
Фиксированная версия:
classpath 'com.android.tools.build:gradle:2.3.3'
и не забудьте добавить следующую зависимость в файле градиента уровня проекта.
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'com.google.gms:google-services:3.1.0'
}
Я также испытал это исключение, когда настройки местоположения были отключены. Перед вызовом API убедитесь, что вы включили службы определения местоположения.
Убедитесь, что вы добавили следующие метаданные в свой файл манифеста.
<application
...
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="YOUR_API_KEY" />
</application>
Также проверьте наличие ограничений API в консоли Google API. Если вы включили какое-либо ограничение API для API_KEY, оно будет работать только для конкретного API. Вы должны добавить Places SDK for Android
соответствии с ограничениями API.
Ну, в моем случае и com.google.android.gms.version
и com.google.android.geo.API_KEY
уже были добавлены в манифест. Почему произошла эта ошибка, потому что я переключил свой проект на новую систему, в которой ключ sha1 не был найден в списке.
Чтобы устранить эту ошибку, я сделал следующее: я сгенерировал новый SHA1 из моей новой системы и добавил этот SHA1 в
учетные данные => ключ API => затем добавьте имя пакета и SHA1
Places SDK для Android