wake-up-neo.com

Google Places-API für Android-Ortsauswahl funktioniert nicht

Ich kann die Ortsauswahl in meiner App nicht verwenden. Die API funktionierte dann nur einen Tag ohne weitere Erklärung. Der Picker wird nur für kurze Zeit angezeigt und schließt dann einfach und ohne Ausnahme in den Protokollen. Die onActivityResult-Funktion wird mit requestCode = 1, resultCode = 2 (Fehlercode) und ohne Daten aufgerufen. Der Beispielcode von Google macht dasselbe. Ich habe alles versucht, damit das funktioniert. Hat jemand etwas Ähnliches erlebt? Hilfe bitte.

AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="com.easy.parcelapp."
    Android:versionCode="1"
    Android:versionName="1.0" >

    <uses-sdk
        Android:minSdkVersion="16"
        Android:targetSdkVersion="22" />

    <uses-feature
        Android:glEsVersion="0x00020000"
        Android:required="true" />

    <uses-permission Android:name="Android.permission.CAMERA" />
    <uses-permission Android:name="Android.permission.VIBRATE" />
    <uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission Android:name="Android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission Android:name="Android.permission.INTERNET" />
    <uses-permission Android:name="Android.permission.RECEIVE_SMS" />
    <uses-permission Android:name="Android.permission.RECORD_AUDIO" />
    <uses-permission Android:name="Android.permission.RECORD_VIDEO" />
    <uses-permission Android:name="Android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission Android:name="Android.permission.READ_CONTACTS" />
    <uses-permission Android:name="Android.permission.WRITE_CONTACTS" />
    <uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission Android:name="Android.permission.GET_ACCOUNTS" />
    <uses-permission Android:name="Android.permission.BROADCAST_STICKY" />
    <uses-permission Android:name="Android.permission.WAKE_LOCK" />
    <uses-permission Android:name="Android.permission.READ_PHONE_STATE" />
    <uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE"  />
    <uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES"/>

    <application
        Android:name=".EasiParcelApplication"
        Android:allowBackup="true"
        Android:icon="@drawable/ic_launcher"
        Android:label="@string/app_name"
        Android:theme="@style/AppTheme" >

        <meta-data
            Android:name="com.google.Android.gms.version"
            Android:value="@integer/google_play_services_version" />
        <meta-data
            Android:name="com.google.Android.maps.v2.API_KEY"
            Android:value="AIzaSyDEcV-My-Actual-API-Key-goes-here" />

        <activity
            Android:name=".MainActivity"
            Android:label="@string/app_name"
            Android:theme="@Android:style/Theme.Holo.Light.NoActionBar" >
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />

                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            Android:name=".RegistrationActivity"
            Android:label="@string/title_activity_register"
            Android:parentActivityName=".MainActivity" >
            <meta-data
                Android:name="Android.support.PARENT_ACTIVITY"
                Android:value="com.easiparcel.MainActivity" />
        </activity>
        <activity
            Android:name=".JobListingActivity"
            Android:label="@string/title_activity_listing" >
        </activity>
        <activity
            Android:name=".NewJobActivity"
            Android:label="@string/title_activity_new_job"
            Android:parentActivityName=".JobListingActivity" >
            <meta-data
                Android:name="Android.support.PARENT_ACTIVITY"
                Android:value="com.easiparcel.JobListingActivity" />
        </activity>
        <activity
            Android:name=".NewJobConfirmation"
            Android:label="@string/title_activity_new_job_confirmation"
            Android:parentActivityName=".NewJobActivity" >
            <meta-data
                Android:name="Android.support.PARENT_ACTIVITY"
                Android:value="com.easiparcel.NewJobActivity" />
        </activity>
        <activity
            Android:name=".JobDetails"
            Android:label="@string/title_activity_job_details"
            Android:parentActivityName=".JobListingActivity" >
            <meta-data
                Android:name="Android.support.PARENT_ACTIVITY"
                Android:value="com.easiparcel.JobListingActivity" />
        </activity>
    </application>

</manifest>

Aktivität.Java

  public void HandleSenderAddressPickerClicked(View view)
{
    int PLACE_PICKER_REQUEST = 1;
    LoadPlacePicker(PLACE_PICKER_REQUEST);

}

public void HandleRecieverAddressPickerClicked(View view)
{
    int PLACE_PICKER_REQUEST = 2;
    LoadPlacePicker(PLACE_PICKER_REQUEST);

}

private void LoadPlacePicker(int PlacePickerRequest)
{
    try {

        PlacePicker.IntentBuilder intentBuilder = new PlacePicker.IntentBuilder();
        Intent intent = intentBuilder.build(NewJobActivity.this);
        // Start the Intent by requesting a result, identified by a request code.
        startActivityForResult(intent, PlacePickerRequest);


    } catch (GooglePlayServicesRepairableException e) {
        GooglePlayServicesUtil
                .getErrorDialog(e.getConnectionStatusCode(), NewJobActivity.this, 0);
    } catch (GooglePlayServicesNotAvailableException e) {
        Toast.makeText(NewJobActivity.this, "Google Play Services is not available.",
                Toast.LENGTH_LONG)
                .show();
    }
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if (resultCode == RESULT_OK) {
            Place place = PlacePicker.getPlace(data, this);
            String toastMsg = String.format("Sender Place: %s", place.getName());
            Toast.makeText(this, toastMsg, Toast.LENGTH_LONG).show();
        }
    }

    //Reciever
    if (requestCode == 2) {
        if (resultCode == RESULT_OK) {
            Place place = PlacePicker.getPlace(data, this);
            String toastMsg = String.format("Receiver Place: %s", place.getName());
            Toast.makeText(this, toastMsg, Toast.LENGTH_LONG).show();
        }
    }
}
11
CG Patterson

Ich fand die Antwort auf meine eigene Frage. 

Wenn jemand anderes auf dasselbe Problem stößt, stellen Sie sicher, dass Sie "Places API für Android" aktivieren und nicht nur "Places API" in der Developer Console . "Places API für Android" wird unter "APIs & Auth/APIs" nicht angezeigt, da dies (noch) keine beliebte API ist. Sie müssen danach mit dem API-Suchfeld danach suchen.

27
CG Patterson

an Stelle von:

<meta-data
    Android:name="com.google.Android.maps.v2.API_KEY"
    Android:value="your_key"/>

füge das hinzu:

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

Es hat für mich funktioniert !!!

10
codeKnight

Überprüfen Sie Ihre Build-Variante.

Wenn Sie wieder von release zu debug gewechselt haben, erhalten Sie normalerweise auch den Ergebniscode 2.

Die Umstellung auf release hat für mich den Trick gebracht.

0
wbervoets