Ich entwickle eine Android-Anwendung und habe in Google Places nach Funktionen in der Anwendung gesucht. Google hat kürzlich die PlacePicker-Funktion veröffentlicht, die ich gerade benutze. Ich habe die Google-Richtlinien und Kurzanleitungen zum "T" befolgt. Die Funktionalität hat vor drei Stunden erstaunlich gut funktioniert, und jetzt, wenn ich sie teste, wird sie gestartet und sofort geschlossen, ohne dass Fehler in der Stapelablaufverfolgung auftreten. So verwende ich den Code:
Dies ist innerhalb eines Fragments.
// The Location Selection from Google Place Picker
where.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
launchPlace();
} catch (GooglePlayServicesNotAvailableException | GooglePlayServicesRepairableException e) {
e.printStackTrace();
}
}
});
Dies ist innerhalb der Fragmente onCreateView.
Die Methode launchPlace () ist wie folgt definiert.
// Start Google Place Picker Code **************************************************************
public void launchPlace() throws GooglePlayServicesNotAvailableException,
GooglePlayServicesRepairableException {
PLACE_PICKER_REQUEST = 1;
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
Context context = getActivity().getApplicationContext();
startActivityForResult(builder.build(context), PLACE_PICKER_REQUEST);
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
String badLocation = "That location is not valid for this app, please select a valid location";
if (requestCode == PLACE_PICKER_REQUEST) {
if (resultCode == Activity.RESULT_OK) {
place = PlacePicker.getPlace(data, getActivity().getApplicationContext());
if (place.getPlaceTypes().contains(34)) {
if (place.getPlaceTypes().contains(9) || place.getPlaceTypes().contains(15) ||
place.getPlaceTypes().contains(38) ||
place.getPlaceTypes().contains(67) ||
place.getPlaceTypes().contains(79)) {
where.setText(place.getName());
loc = true;
} else {
Toast.makeText(getActivity().getApplicationContext(),
badLocation, Toast.LENGTH_LONG).show();
try {
launchPlace();
} catch (GooglePlayServicesNotAvailableException | GooglePlayServicesRepairableException e) {
e.printStackTrace();
}
}
}
}
}
}
Dieser Code hat zuvor funktioniert (vor 3 Stunden) und funktioniert jetzt nicht. Folgendes sagt LogCat: (Android Studio)
04-21 15:48:02.320 5045-5045/com.siliconmindtech.trofi D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
04-21 15:48:02.680 5045-5124/com.siliconmindtech.trofi D/OpenGLRenderer﹕ endAllStagingAnimators on 0xa1a55600 (InsetDrawable) with handle 0xa185dff0
04-21 15:48:05.000 5045-5121/com.siliconmindtech.trofi I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
04-21 15:48:05.060 5045-5045/com.siliconmindtech.trofi I/Timeline﹕ Timeline: Activity_idle id: [email protected] time:9757022
Wenn jemand einen Weg kennt, der dabei helfen kann, wäre das erstaunlich, ich weiß, dass Google PlacePicker ziemlich neu ist, aber ich bin ein Android-Einsteiger und fühle, dass jemand ein besseres Verständnis als ich hat. Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen. Wir verwenden GitHub, sodass ich bis zu der Zeit zurückkehrte, als es einmal funktioniert hat, aber es hat sich nichts geändert, es wird immer noch geschlossen (der Picker, nicht die App). Ich habe die Google Places-API und die Google Places-API für Android in der Entwicklerkonsole aktiviert, auch dort keine Hilfe. Sie gelangen zum Bildschirm "Aktualisieren Ihres Standorts" und stoppen dann.
BEARBEITEN: Dies ist das gesamte LogCat, vom Start (auf einem Samsung Galaxy S5) bis zum PlacePicker (eine Navigation vor dieser Aktion), Schließen und Rückkehr zur App. Hast du das gemeint?
04-21 16:56:26.740 27318-27318/com.siliconmindtech.trofi D/ResourcesManager﹕ creating new AssetManager and set to /data/app/com.siliconmindtech.trofi-1/base.apk
04-21 16:56:26.910 27318-27318/com.siliconmindtech.trofi D/AbsListView﹕ Get MotionRecognitionManager
04-21 16:56:26.910 27318-27340/com.siliconmindtech.trofi I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
04-21 16:56:26.910 27318-27340/com.siliconmindtech.trofi I/System.out﹕ (HTTPLog)-Static: isShipBuild true
04-21 16:56:26.910 27318-27340/com.siliconmindtech.trofi I/System.out﹕ (HTTPLog)-Thread-13137-1066627414: SmartBonding Enabling is false, SHIP_BUILD is true, log to file is false, DBG is false
04-21 16:56:26.910 27318-27340/com.siliconmindtech.trofi I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
04-21 16:56:26.910 27318-27318/com.siliconmindtech.trofi D/AbsListView﹕ Get MotionRecognitionManager
04-21 16:56:26.940 27318-27318/com.siliconmindtech.trofi D/Activity﹕ performCreate Call secproduct feature valuefalse
04-21 16:56:26.940 27318-27318/com.siliconmindtech.trofi D/Activity﹕ performCreate Call debug elastic valuetrue
04-21 16:56:26.950 27318-27318/com.siliconmindtech.trofi D/AbsListView﹕ Get MotionRecognitionManager
04-21 16:56:26.970 27318-27350/com.siliconmindtech.trofi D/OpenGLRenderer﹕ Render dirty regions requested: true
04-21 16:56:27.030 27318-27350/com.siliconmindtech.trofi I/Adreno-EGL﹕ <qeglDrvAPI_eglInitialize:410>: EGL 1.4 QUALCOMM build: ()
OpenGL ES Shader Compiler Version: E031.25.01.03
Build Date: 10/28/14 Tue
Local Branch: LA.BF.1.1_RB1_20141028_021_patches2
Remote Branch:
Local Patches:
Reconstruct Branch:
04-21 16:56:27.030 27318-27350/com.siliconmindtech.trofi I/OpenGLRenderer﹕ Initialized EGL, version 1.4
04-21 16:56:27.050 27318-27350/com.siliconmindtech.trofi I/OpenGLRenderer﹕ HWUI protection enabled for context , &this =0xa23090d8 ,&mEglDisplay = 1 , &mEglConfig = 8
04-21 16:56:27.050 27318-27350/com.siliconmindtech.trofi D/OpenGLRenderer﹕ Enabling debug mode 0
04-21 16:56:27.050 27318-27340/com.siliconmindtech.trofi I/System.out﹕ KnoxVpnUidStorageknoxVpnSupported API value returned is false
04-21 16:56:27.240 27318-27350/com.siliconmindtech.trofi V/RenderScript﹕ Application requested CPU execution
04-21 16:56:27.260 27318-27350/com.siliconmindtech.trofi V/RenderScript﹕ 0xa2377a00 Launching thread(s), CPUs 4
04-21 16:56:27.310 27318-27318/com.siliconmindtech.trofi I/Timeline﹕ Timeline: Activity_idle id: [email protected] time:13859270
04-21 16:56:29.700 27318-27318/com.siliconmindtech.trofi D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
04-21 16:56:31.850 27318-27318/com.siliconmindtech.trofi D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
04-21 16:56:31.970 27318-27318/com.siliconmindtech.trofi I/Places﹕ Got here!
04-21 16:56:32.300 27318-27350/com.siliconmindtech.trofi D/OpenGLRenderer﹕ endAllStagingAnimators on 0xa196d600 (InsetDrawable) with handle 0xaf7fc350
04-21 16:56:32.740 27318-27318/com.siliconmindtech.trofi I/Timeline﹕ Timeline: Activity_idle id: [email protected] time:13864703
Das obige LogCat ist ausführlich.
Lösung: Seien Sie kein Neuling wie ich, ich hatte vergessen, meinen Google-API-Schlüssel zu meiner Android_manifest.xml hinzuzufügen ... Ich entschuldige mich.
Aktivieren Sie einfach Google Places-API für Android in Ihrer Google Developer Console.
Vergessen Sie nicht, Ihren API-Schlüssel bei AndroidManifest
anzugeben:
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="ADD_YOUR_API_KEY_HERE" />
Ich glaube, als Google am 20.04.2015 Änderungen an seinen APIs vorgenommen hat, haben sie die Orts-API geändert, die der PlacePicker von Natur aus verwendet. Die Lösung, die für mich funktioniert hat, ist folgende:
<application ...
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="@string/google_api_key" />
... </application>
<string name="google_api_key">yourkeyhere</string>
Ich habe das gleiche Problem. Ich füge einen Google-Kartenschlüssel hinzu
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="@string/google_maps_key"/>` in manifest file.
Der Place Picker wird sofort geschlossen. Dann füge ich auch hinzu
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="@string/google_api_key" />
Die Ortsauswahl wird angezeigt, aber wenn ich die Karte öffne, wurde meine Anwendung zwangsweise geschlossen und protokolliert wie unten.
RuntimeException: The API key can only be specified once. It is recommended that you use the meta-data tag with the name: com.google.Android.maps.v2.API_KEY in the <application> element of AndroidManifest.xml
at com.google.maps.api.Android.lib6.d.fb.a(Unknown Source)
at com.google.maps.api.Android.lib6.a.g.a(Unknown Source)
at com.google.Android.gms.maps.internal.CreatorImpl.b(Unknown Source)
at com.google.Android.gms.maps.internal.CreatorImpl.b(Unknown Source)
at com.google.Android.gms.maps.internal.i.onTransact(SourceFile:62)
at Android.os.Binder.transact(Binder.Java:364)
at com.google.Android.gms.maps.internal.zzc$zza$zza.zzj(Unknown Source)
at com.google.Android.gms.maps.SupportMapFragment$zzb.zzqs(Unknown Source)
at com.google.Android.gms.maps.SupportMapFragment$zzb.zza(Unknown Source)
at com.google.Android.gms.dynamic.zza.zza(Unknown Source)
at com.google.Android.gms.dynamic.zza.onCreate(Unknown Source)
at com.google.Android.gms.maps.SupportMapFragment.onCreate(Unknown Source)
at Android.support.v4.app.Fragment.performCreate(Fragment.Java:1763)
at Android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.Java:915)
at Android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.Java:1136)
at Android.support.v4.app.BackStackRecord.run(BackStackRecord.Java:739)
at Android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.Java:1499)
at Android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.Java:456)
at Android.os.Handler.handleCallback(Handler.Java:733)
at Android.os.Handler.dispatchMessage(Handler.Java:95)
at Android.os.Looper.loop(Looper.Java:136)
at Android.app.ActivityThread.main(ActivityThread.Java:5103)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:515)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:790)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:606)
at dalvik.system.NativeStart.main(Native Method)
Ich versuche zu entfernen
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="@string/google_maps_key"/>` but keep `<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="@string/google_api_key" />
Und es funktioniert jetzt gut und ich weiß nicht warum.
ersetzen Sie Ihr Metadaten-Tag im Hauptfest .. es funktioniert für mich ..
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="YOUR Android KEY" />
mit
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="YOUR Android KEY" />
viel Glück
Ich hatte die gleichen Probleme mit der Places-API. Am Ende habe ich herausgefunden, dass es verschiedene Google Places-APIs speziell für Android gibt. Folglich war der API-Schlüssel, den ich verwendete, einfach für die Nicht-Android-Version.
Generieren Sie Ihren Schlüssel mit diesem Link: https://developers.google.com/places/Android-api/signup
in meinem Fall GO to Google COnsole dann Enabled API für Android Google Places, dann Gehe zu Manifest.xml und füge diesen Code unter
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="@string/google_maps_key" />
<meta-data
Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version" />
und vergessen Sie nicht, Google API-Schlüssel zu setzen