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 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>
【问题讨论】:
能否请您发布您的 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.version
和 com.google.android.geo.API_KEY
都已添加到清单中。
为什么会出现这个错误,因为我将我的项目切换到一个新系统,但列表中的 sha1 键不匹配。
我为解决此错误所做的是: 我已经从我的新系统生成了新的 SHA1,并在
下添加了这个 SHA1credentials=> 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的主要内容,如果未能解决你的问题,请参考以下文章