RuntimeExecutionException:com.google.android.gms.common.api.ApiException:13:错误位置 API

Posted

技术标签:

【中文标题】RuntimeExecutionException:com.google.android.gms.common.api.ApiException:13:错误位置 API【英文标题】:RuntimeExecutionException: com.google.android.gms.common.api.ApiException: 13: ERROR Places API 【发布时间】:2018-04-27 00:15:29 【问题描述】:

我在尝试 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(); 这行给了我错误。

我通过提供包名称和 SHA-1 密钥从 Google API console 进行调试,为 android 应用程序创建了一个 API key。和enabled Google Places API for androidlibraries 部分。仍然给出同样的错误。不知道实施有什么问题。请帮帮我。

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

【问题讨论】:

能否请您发布您的 build.gradle 文件。 @Dilip 已更新。请检查 您是否在manifest 文件中添加了API 密钥? 是的,我已经添加了这个问题。请看。 【参考方案1】:

我遇到了同样的问题,我可以通过从 Google 控制台启用 Google Places Api 并添加 Places 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 设备进行测试。

【讨论】:

以前我已经按照这里的指示设置了我的密钥,然后搜索功能突然停止工作(这可能与我从 AutoCompleteActivity 小部件切换到编程PlacesAutocompleteAdapter有关。所以我不得不重新创建/获取新的 GCP 密钥【参考方案2】:

请按照希望尝试,这样它会起作用。

1) 请更新您的 \sdk\extras\google\google_play_services 并重试。

2)如果您使用 proguard,请在 proguard-rules.pro 中排除 google 类的混淆:

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

     

【讨论】:

它是一个示例,我在没有 proguard 的情况下以调试模式运行。我正在使用这个 gradle 版本com.android.tools.build:gradle:3.0.0【参考方案3】:

在清单中添加以下代码

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

【讨论】:

这不能解决问题 @IgorGanapolsky 你在 logcat 窗口中到底得到了什么 @UmarAta 这个问题com.google.android.gms.common.api.ApiException: 13 是特定于设备的。您的代码无法解决问题 是的,我有,但不能解决问题@UmarAta 你能描述一下你到目前为止做了什么以及你在 logcat @Vicky 中遇到了什么错误【参考方案4】:

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

【讨论】:

得到了解决方案。请参阅@Umar 的回答。 如果关闭定位服务,您将遇到同样的错误。所以请记住这一点【参考方案5】:

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

【讨论】:

【参考方案6】:

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

<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

【讨论】:

【参考方案7】:

好的。我希望你不必像我一样浪费太多时间来发现这一点。但是要让@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 for Android 解决了这个问题,事情终于好了。

【讨论】:

您能否说明如何启用 Place SDK for Android?启用 API 并查询“Place SDK for Android”时,Google 仅返回“Places API”,这一直给我 PLACES_API_ACCESS_NOT_CONFIGURED 9003 错误。谢谢 @user1823280 启用 Places API 后。从左侧导航窗格转到 APIs 选项卡。在那里你可以启用和禁用某些其他附加 API。从那里启用 Places SDK for Android。我将在答案中添加屏幕截图。 感谢您的回复。我曾尝试过,但网站返回以下错误:“您没有足够的权限查看此页面。跟踪号:61.......................82”这仅在单击时发生在“Places SDK for Android”API 上。我能问你在写这篇文章时它是否适合你? 现在好像大家都有这种情况了,这里也问了同样的问题:***.com/questions/54519374/… 我的意思是,如果它对您有用,那么使用“Places SDK for Android”创建一个新密钥。我查了一下,这对任何人来说都不可能了。您的应用正在运行,因为它使用的是“旧”SDK(Android 版 Places SDK)和一个在 2019 年 1 月 29 日之前创建的密钥。现在只有在与新的 Places SDK 相关联的情况下才能在该日期之后创建新密钥,即使用新的依赖项'com.google.android.libraries.places:places:1.0.0'。来源:developers.google.com/places/android-sdk/client-migration【参考方案8】:

在我的情况下,com.google.android.gms.versioncom.google.android.geo.API_KEY 都已添加到清单中。 为什么会出现这个错误,因为我将我的项目切换到一个新系统,但列表中的 sha1 键不匹配。

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

下添加了这个 SHA1

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

of Places SDK for Android

【讨论】:

【参考方案9】:

我刚刚通过修复我在设备上的权限解决了这个错误。当我应该请求 ALLOW_BACKGROUND_LOCATION 时,我已经请求了 ALLOW_FINE_LOCATION。只是想我会把它放在这里,以便人们意识到这个错误可能与您的 API 密钥无关。 “异常 13”似乎是某种包罗万象的东西。

【讨论】:

以上是关于RuntimeExecutionException:com.google.android.gms.common.api.ApiException:13:错误位置 API的主要内容,如果未能解决你的问题,请参考以下文章