RuntimeExecutionException: com.google.android.gms.common.api.ApiException: 13: API-интерфейсы ERROR

Я получаю следующее исключение при опробовании 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>

Ответ 1

Добавьте нижеприведенный код в манифест

 <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

Ответ 2

У меня была такая же проблема, я смог ее разрешить, включив 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-устройства для тестирования.

Ответ 3

Вы можете увидеть обсуждение здесь по этому вопросу. Для меня проблема возникла на эмуляторе, но он работал на физическом устройстве.

Ответ 4

ХОРОШО. Надеюсь, вам не пришлось тратить столько времени, как я, чтобы это выяснить. Но чтобы получить ответ @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, и все наконец выздоровело.

After enabling Places API enable other additional APIs from inside the APIs tab.

Ответ 5

Пожалуйста, попробуйте следующую надежду, чтобы она работала.

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'

    } 

Ответ 6

Я также испытал это исключение, когда настройки местоположения были отключены. Перед вызовом API убедитесь, что вы включили службы определения местоположения.

Ответ 7

Убедитесь, что вы добавили следующие метаданные в свой файл манифеста.

<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.

enter image description here

Ответ 8

Ну, в моем случае и com.google.android.gms.version и com.google.android.geo.API_KEY уже были добавлены в манифест. Почему произошла эта ошибка, потому что я переключил свой проект на новую систему, в которой ключ sha1 не был найден в списке.

Чтобы устранить эту ошибку, я сделал следующее: я сгенерировал новый SHA1 из моей новой системы и добавил этот SHA1 в

учетные данные => ключ API => затем добавьте имя пакета и SHA1

Places SDK для Android