web-dev-qa-db-ja.com

Google Places API for Android PlacePickerが機能しない

アプリでプレイスピッカーを使用できません。 APIが機能した後、説明なしで1日停止しました。ピッカーが非常に短い時間表示された後、例外なくログに何も表示されずに閉じられます。 onActivityResult関数は、requestCode = 1、resultCode = 2(エラーコード)で、データなしで呼び出されます。グーグルからのサンプルコードは同じことをします。私はこれを機能させるためにあらゆることを試みました。誰かが似たようなことを経験しますか?助けてください。

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>

Activity.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

私は自分の質問に対する答えを見つけました。

他の誰かが同じ問題に遭遇した場合は、 "Places API"だけでなく、 "Places API for Android"を有効にしてください。 開発者コンソール「PlacesAPI for Android」は、人気のあるAPIではないため(まだ)「APIと認証/ API」の下に表示されません。 API検索ボックスを使用して検索する必要があります。

27
CG Patterson

これの代わりに:

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

これを追加:

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

それは私のために働いた!!!

10
codeKnight

ビルドバリアントを確認してください。

releaseからdebugに切り替えた場合、通常は結果コード2も取得します。

releaseに戻すと、うまくいきました。

0
wbervoets