Android Place Picker sluit onmiddellijk na lancering

Ik ontwikkel een Android-applicatie als onderdeel van een project en gebruik de Google Places API om interessante plaatsen weer te geven op basis van locatie. Ik gebruik de PlacePicker Inentbuilder om dit te bereiken.

Wanneer de app echter wordt uitgevoerd, wordt de plaatskiezer gestart en vervolgens onmiddellijk gesloten (ongeveer 1-2 seconden).

Ik heb de onderstaande suggesties al geïmplementeerd (die ik van andere antwoorden heb gekregen):

Ik heb de openbare API-sleutel voor Android-apps gegenereerd en neem deze op in de metadatatag in het app-manifest.

Ik heb de API “Google Places API voor Android” ingeschakeld op de ontwikkelaarsconsole.

Ik heb de nieuwste versie van de afspeelservices opgenomen in afhankelijkheden in build.gradle.

Ik heb mijn code en de logcat hieronder toegevoegd. Laat het me weten als ik nog iets moet toevoegen.

Manifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sampath.project.project_v2" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <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="@string/google_api_key" />
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="@string/google_api_key" />"
    <activity
        android:name=".LoginActivity"
        android:label="@string/title_activity_login" >
    </activity>
    <activity
        android:name=".PlacesSample"
        android:label="@string/title_activity_places_sample" >
        <meta-data
            android:name="com.google.android.geo.api_key"
            android:value="@string/google_api_key" />
    </activity>
</application>
</manifest>

Build.gradle (app-module – Dit is de enige module)

apply plugin: 'com.android.application'
android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"
    defaultConfig {
        applicationId "com.sampath.project.project_v2"
        minSdkVersion 16
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    //compile fileTree(include: ['*.jar'], dir: 'libs')
    //compile 'com.android.support:appcompat-v7:22.1.1'
    compile 'com.android.support:appcompat-v7:22.1.1'
    compile 'com.android.support:cardview-v7:22.1.1'
    compile 'com.android.support:recyclerview-v7:22.1.1'
    compile 'com.google.android.gms:play-services:7.3.0'
}

PlacesSample – Activiteit die de Google Places API gebruikt:

package com.sampath.project.project_v2;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
import com.google.android.gms.common.GooglePlayServicesRepairableException;
import com.google.android.gms.location.places.Place;
import com.google.android.gms.location.places.ui.PlacePicker;
public class PlacesSample extends AppCompatActivity {
    TextView getLocation;
    int PLACE_PICKER_REQUEST = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_places_sample);
        getLocation = (TextView)findViewById(R.id.getLocTV);
        getLocation.setClickable(true);
        getLocation.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
                Intent intent;
                try {
                    intent = builder.build(getApplicationContext());
                    startActivityForResult(intent, PLACE_PICKER_REQUEST);
                    System.out.println("start activity for result");
                } catch (GooglePlayServicesRepairableException e) {
                    e.printStackTrace();
                } catch (GooglePlayServicesNotAvailableException e) {
                    e.printStackTrace();
                }
            }
        });
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_places_sample, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        System.out.println("onActivityResult");
        if (requestCode == PLACE_PICKER_REQUEST) {
            if (resultCode == RESULT_OK) {
                Place place = PlacePicker.getPlace(data, this);
                String toastMsg = String.format("Place: %s", place.getName());
                Toast.makeText(this, toastMsg, Toast.LENGTH_LONG).show();
            }
        }
    }
}

Logcat:

05-05 23:38:30.593  21408-21408/com.sampath.project.project_v2 I/Timeline﹕ Timeline: Activity_idle id: [email protected] time:628772943
05-05 23:38:30.598  21408-21408/com.sampath.project.project_v2 I/Timeline﹕ Timeline: Activity_idle id: [email protected] time:628772948
05-05 23:38:31.517  21408-21408/com.sampath.project.project_v2 I/Timeline﹕ Timeline: Activity_launch_request id:com.sampath.project.project_v2 time:628773867
05-05 23:38:31.527  21408-21408/com.sampath.project.project_v2 W/ResourceType﹕ For resource 0x01030224, entry index(548) is beyond type entryCount(9)
05-05 23:38:31.527  21408-21408/com.sampath.project.project_v2 W/ResourceType﹕ For resource 0x01030224, entry index(548) is beyond type entryCount(9)
05-05 23:38:31.636  21408-21408/com.sampath.project.project_v2 I/Timeline﹕ Timeline: Activity_idle id: [email protected] time:628773986
05-05 23:38:33.869  21408-21408/com.sampath.project.project_v2 I/System.out﹕ start activity for result
05-05 23:38:34.227  21408-21408/com.sampath.project.project_v2 I/System.out﹕ onActivityResult
05-05 23:38:34.235  21408-21408/com.sampath.project.project_v2 I/Timeline﹕ Timeline: Activity_idle id: [email protected] time:628776586

Antwoord 1, autoriteit 100%

De oplossingen van Francois Wouts hebben hieraan bijgedragen. Bedankt François…

Ik heb de logboeken doorzocht met het trefwoord ‘Places’ en ontdekte dat Places API inderdaad een uitzondering maakte. Het verwachtte de com.google.android.geo.API_KEYbinnen de <application>-tags in de Manifest.xml.

Ik was veranderd naar com.google.android.geo.API_KEYin de <activity>-tag en niet die in de <application>-tag.

Nu gewijzigd in com.google.android.geo.API_KEYen dezelfde regels verwijderd uit de <activity>-tag en het werkt. Voel me een idioot dat ik dit niet alleen heb opgelost..

De metadatatag moet android:name="com.google.android.geo.API_KEY"
bevatten
Het moet binnen de <application>-tag in het manifest staan.


Antwoord 2, autoriteit 48%

voer hier afbeeldingsbeschrijving inHeb je gecontroleerd of je API-sleutel is gekoppeld aan je applicatie (pakketnaam en SHA-1-vingerafdruk van het certificaat van je app) in de Ontwikkelaarsconsole?

Je kunt instructies vinden op Aanmelden en API-sleutels. Zorg ervoor dat u het instelt voor zowel uw debug- als uw vrijgavecertificaten.

Ik hoop dat dat helpt!


Antwoord 3, autoriteit 29%

Ik had hetzelfde probleem. Zorg ervoor dat u de Google Places API voor Androidinschakelt en niet alleen de Places APIin de Ontwikkelaarsconsole. “Places API for Android” wordt niet weergegeven onder API’s & Auth/API’somdat het (nog) geen populaire API is. U moet ernaar zoeken met behulp van het API-zoekvak.


Antwoord 4, autoriteit 6%

In manifestbestand com.google.android.geo.api_keyen com.google.android.maps.v2.API_KEYmogen niet hetzelfde zijn.

ga naar https://console.developers.google.com/project

log in en volg deze stappen om de sleutel voor placepicker-plaatsen te krijgen.

maak of kies bestaande > gebruik google api’s > Google Places API voor Android> > inschakelen inloggegevens in linkermenu > inloggegevens toevoegen > api-sleutel > Android-toets > maak > kopieersleutel.

plak uw sleutel in manifest “com.google.android.geo.api_key

Opmerking: er is een limiet van 1000 verzoeken per dag voor google places api. nadat je geld moet betalen. Het is beter om PlacePicker te vermijden.


Antwoord 5, autoriteit 3%

In mijn geval was er een conflict tussen API’s. Ik heb het bestand google-service.json toegevoegd dat ook een API-sleutel had en ik heb een nieuwe sleutel voor Maps gegenereerd. Dus plaatskiezer sloot onmiddellijk.
Oplossing:

  1. Gebruik een enkele API-sleutel in het bestand google-service.json

  2. Schakel de functie “Places SDK for Android” in voor uw Google Cloud Platform-project (met dezelfde naam als in Firebase-project, gebruik geen ander project. U vindt hetzelfde project met dezelfde naam als in Firebase)

  3. Zet SHA1-toepassingsbeperking voor Android-app (aanbevolen)
  4. Controleer of u de volgende code alleen in de toepassingstag hebt geplaatst

       <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="API_KEY" />
    

Antwoord 6, autoriteit 2%

Dit probleem maakte me ook gek, er zijn zoveel problemen met betrekking tot precies dit probleem, maar niemand was behulpzaam voor mij. Uiteindelijk kwam ik erachter dat er verschillende Google Places API’s zijn speciaal voor Android. Bijgevolg was de API-sleutel die ik gebruikte gewoon voor de niet-Android-versie.

Genereer uw sleutel via deze link
https://developers.google.com/places/android-api/signup


Antwoord 7, autoriteit 2%

Misschien bent u vergeten de SHA-sleutel van uw machine toe te voegen aan de Google Maps Console. Geconfronteerd met hetzelfde probleem, mijn SHA-sleutel toegevoegd aan de console, het begon goed te werken.


Antwoord 8, autoriteit 2%

Ik vul het Toestemmingsschermin API’s & Auth van de console en het werkt prima. Controleer de schermafbeelding.
voer hier de afbeeldingsbeschrijving in


Antwoord 9, autoriteit 2%

Het was vreemd dat het een probleem met inloggegevens was voor mij. Het werkt zelfs zonder waarschuwing in de foutopsporingsmodus, maar wanneer ik de vrijgegeven versie van mijn app gebruik, werkt het gewoon niet (ik heb mijn vrijgave en debug sha1-sleutels geregistreerd) Dus ik heb alle beperkingen verwijderd en nu werkt het.


Antwoord 10, autoriteit 2%

Compilatie 'com.google.android.gms:play-services-location:8.1.0'in stappen toevoegen


Antwoord 11

Ik zal dit hier neerzetten, misschien helpt het iemand in de toekomst.

Voor mij veroorzaakte het gebruik van de verkeerde API-sleutel de crash, ook al werkte het in het verleden prima.

Plaats SDK voor Android - Referenties

Ik moest de tweede sleutel gebruiken (degene die automatisch is gemaakt door Google-services voor Android) in plaats van de eerste die ik heb gemaakt.


Antwoord 12

In mijn geval, toen ik de huidige API-sleutel veranderde met die in google-service.json, loste dit het probleem op.

In google-services.json:

"api_key": [
        {
          "current_key": "PASTE THIS API KEY TO THE MANIFEST"
        }
      ]

Antwoord 13

De PlacePickeris nu officieel verouderd.

Ik probeer de cursus Udacity Advanced Android App Development af te ronden en loop tegen hetzelfde probleem aan.
https://developers.google.com/places/ android-sdk/client-migration#place-picker-deprecationzegt dat

De plaatskiezer is beëindigd op 29 januari 2019. Hij is uitgeschakeld
op 29 juli 2019, en is niet langer beschikbaar. Voortgezet gebruik zal
resulteren in een foutmelding. De nieuwe SDK ondersteunt de plaats niet
Kiezer.

Cross-posten naar https://github.com/googlemaps/android -places-demos/issues/2


Antwoord 14

De PlacePicker is nu officieel verouderd.

Probeer deze bibliotheek. Licht van gewicht en vergelijkbaar met placepicker met enkele extra functies.

https://github.com/BilalSiddiqui/AddressPicker


Antwoord 15

In mijn geval had ik Google mijn factureringsaccountgegevens niet verstrekt, dus de API was uitgeschakeld, zelfs nadat ik deze had ingeschakeld.

Als dit ook voor jou het geval is, voeg dan het factureringsaccount toe in de Google Cloud Console en uiteindelijk kun je het doen.

Other episodes