RuntimeExecutionException:com.google.android.gms.common.api.ApiException:13:ERROR Places API

时间:2017-11-14 06:37:39

标签: android google-maps-api-3 google-places-api

我在尝试google places API时获得以下异常,以便在android中获得Current Place的可能位置。

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();行给出了错误。

我为android app创建了一个API key,为Google API console提供了调试包名和SHA-1密钥。 enabled Google Places API for android部分中的libraries。仍然给它同样的错误。不知道实施有什么问题。请帮帮我。

github报道了issue

这是我的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>

8 个答案:

答案 0 :(得分:13)

在清单

中添加以下代码
 <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

答案 1 :(得分:6)

我有同样的问题,我可以通过启用Google从Google控制台放置Api并添加地点api密钥来解决它。只要启用Places api,它就会自动要求您添加api密钥,只需按照说明操作即可。

然后在清单文件中添加API密钥。

<application
    ...

    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="YOUR_API_KEY" />

</application>

此外,您的模拟器应安装最新的Google Play服务。否则使用真正的Android设备进行测试。

答案 2 :(得分:4)

您可以看到有关此问题的讨论here。对我来说,问题发生在模拟器上,但它正在物理设备上工作。

答案 3 :(得分:2)

好。我希望您不必像我那样花那么多的时间来发现这一点。但是要获得@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 通过启用Android版Places SDK修复了该问题,一切终于恢复了。

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

答案 4 :(得分:1)

请尝试遵循希望,以便它能够正常运作。

1)请更新您的\ sdk \ extras \ google \ google_play_services,然后重试。

2)如果您使用的是proguard,请在proguard-rules.pro中排除谷歌类这样的混淆:

-keep public class com.google.** {*;}

3)播放服务库的版本应该相同,例如:

compile 'com.google.android.gms:play-services-maps:11.6.0'
compile 'com.google.android.gms:play-services-gcm:11.6.0'

4)我刚刚遇到这个问题,但是通过降级gradle版本解决了这个问题:

旧的,麻烦的版本:

 classpath 'com.android.tools.build:gradle:2.2.0-rc2'

修正版:

classpath 'com.android.tools.build:gradle:2.3.3'

并且不要忘记在项目级gradle文件中添加以下依赖项。

 dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        classpath 'com.google.gms:google-services:3.1.0'

    } 

答案 5 :(得分:1)

关闭位置设置后,我也遇到了此异常。在进行API调用之前,请确保您已启用位置服务。

答案 6 :(得分:0)

确保在清单文件中添加了以下元数据。

<application
    ...

    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="YOUR_API_KEY" />

</application>

还要检查您的Google API控制台中是否有API限制。如果您对API_KEY启用了任何API限制,则该限制仅适用于特定的API。您必须在API限制下添加Places SDK for Android

enter image description here

答案 7 :(得分:0)

在我的情况下,清单中已经添加了com.google.android.gms.versioncom.google.android.geo.API_KEY。 为什么发生此错误,因为我将项目切换到新系统中,所以sha1键与列表中的键不匹配。

我为解决此错误所做的是: 我已经从新系统中生成了新的SHA1,并将此SHA1添加到了

  

credentials => API Key =>然后添加软件包名称和SHA1

of Android版Places SDK