アプリでプレイスピッカーを使用できません。 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();
}
}
}
私は自分の質問に対する答えを見つけました。
他の誰かが同じ問題に遭遇した場合は、 "Places API"だけでなく、 "Places API for Android"を有効にしてください。 開発者コンソール 。 「PlacesAPI for Android」は、人気のあるAPIではないため(まだ)「APIと認証/ API」の下に表示されません。 API検索ボックスを使用して検索する必要があります。
これの代わりに:
<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" />
それは私のために働いた!!!
ビルドバリアントを確認してください。
release
からdebug
に切り替えた場合、通常は結果コード2
も取得します。
release
に戻すと、うまくいきました。