web-dev-qa-db-fra.com

L'API Google Places pour le sélecteur de lieu Android ne fonctionne pas.

Je ne peux pas utiliser le sélecteur de lieu dans mon application. L’API a fonctionné puis s’est arrêtée un jour sans explication. Le sélecteur s’affiche pendant une très courte période, puis se ferme simplement sans exception et il n’ya rien dans les journaux. La fonction onActivityResult est appelée avec requestCode = 1, resultCode = 2 (code d'erreur) et sans données. L'exemple de code de Google fait la même chose. J'ai tout essayé pour que cela fonctionne. Quelqu'un at-il vécu quelque chose de semblable? Aidez-moi, s'il vous plaît.

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>

Activité.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

J'ai compris la réponse à ma propre question. 

Si quelqu'un d'autre rencontre le même problème, assurez-vous d'activer "API de lieux pour Android" et pas seulement "API de lieux" dans Console développeur . "Places API pour Android" n'apparaîtra pas sous "APIs & Auth/APIs" car ce n'est pas une API populaire (pour le moment). Vous devrez le rechercher à l'aide du champ de recherche de l'API.

27
CG Patterson

au lieu de cela:

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

ajoute ça:

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

Cela a fonctionné pour moi !!!

10
codeKnight

Vérifiez votre variante de construction.

Si vous êtes revenu de release à debug, vous obtenez également le code de résultat 2.

Retourner à release a fait l'affaire pour moi.

0
wbervoets