it-swarm.com.de

Google PlacePicker wird unmittelbar nach dem Start geschlossen

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.

30
Cole Laidlaw

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" />
47
fraggjkee

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:

  1. Rufen Sie Ihre Google Developer Console auf ( https://console.developers.google.com/project ).
  2. Navigieren Sie zu Ihrem Projekt, wenn Sie eines erstellt haben. Wenn nicht, gehen Sie hier: https://developers.google.com/console/help/
  3. Navigieren Sie zu "APIs & auth" und dann zu "Credentials" auf der linken Seite der Konsole. Ich habe nicht genug Vertreter, um ein Bild zur Orientierung zu posten ...
  4. Erstellen Sie einen neuen Schlüssel. Dieser wird unter Öffentlicher API-Zugriff in Ihrem Anmeldeinformationsfenster angezeigt. Sie benötigen Ihren SHA1 Fingerprint, um den Schlüssel zu erhalten. Anweisungen, die ich verwendet habe, sind hier: Wie erhalte ich das SHA-1-Fingerabdruckzertifikat in Android Studio für den Debug-Modus?
  5. Der Ort, an dem Sie Ihren SHA1-Fingerabdruck eingeben, sollte das folgende Format haben: (Ihr Schlüssel, 20 Hex-Werte getrennt durch ":"); com.yourpackage.yourapp
  6. Kopieren Sie Ihren generierten API-Schlüssel. Sie müssen den Fingerabdruck jedes Entwicklers in demselben Format oben hinzufügen, damit er für andere Entwickler verwendet werden kann.
  7. Fügen Sie Ihren Schlüssel zu Ihrer AndroidManifest.xml hinzu

<application ...

<meta-data
            Android:name="com.google.Android.geo.API_KEY"
            Android:value="@string/google_api_key" />

... </application>
Dabei ist der "@ string/google_api_key" /> der Schlüssel, den Sie gerade generiert haben. Fügen Sie es in Ihre Datei strings.xml ein:

<string name="google_api_key">yourkeyhere</string>
  1. Reinigen Sie Ihr Projekt und erstellen Sie es neu. Sollte jetzt funktionieren. Ich glaube nicht, dass ich irgendwelche Schritte ausgelassen habe.
6
Cole Laidlaw

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.

5
thethanh

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

4
ahmed ewess

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

1
bsautermeister

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

0
Yudi karma