Androidで 現在の場所 の可能性のある場所を取得するためにGoogle Places APIを試しているときに、次の例外が発生します。
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
からデバッグ用のパッケージ名とSHA-1キーを指定して、Androidアプリ用のGoogle API console
を作成しました。 libraries
セクションのenabled Google Places API for Android
。それでも同じエラーが発生します。実装の何が問題なのかわかりません。私を助けてください。
これに関して issue が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コンソールから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デバイスを使用します。
この問題に関する議論 こちら を見ることができます。私にとって、問題はエミュレーターで発生しましたが、物理デバイスで動作していました。
OK。これを知るために私がやったほど時間を無駄にしないように願っています。しかし、@ 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を有効にすることで修正されました。
ロケーション設定がオフになっているときにもこの例外が発生しました。 API呼び出しを行う前に、位置情報サービスが有効になっていることを確認してください。
それが機能するように、次の希望を試してみてください。
1)\ sdk\extras\google\google_play_servicesを更新して、もう一度お試しください。
2)proguardを使用している場合、proguard-rules.proでこのような難読化からGoogleクラスを除外してください:
-keep public class com.google.** {*;}
3)play-servicesライブラリのバージョンは同じである必要があります。例:
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'
}
私の場合、com.google.Android.gms.version
とcom.google.Android.geo.API_KEY
の両方がマニフェストに既に追加されています。プロジェクトを新しいシステムに切り替えたため、このエラーが発生した理由sha1キーがリストから一致しませんでした。
このエラーを解決するためにしたことは、新しいシステムから新しいSHA1を生成し、このSHA1を下に追加したことです
クレデンシャル=> APIキー=>その後、パッケージ名とSHA1を追加します
Places SDK for Android