Android PlacePicker 没有 return 选择地址
Android PlacePicker does not return selected address
我在 Android 应用程序中使用 Google PlacePicker。我可以将它用于 select 个地址。但是,一旦地址被 selected,它就不会 return 给调用者 activity。相反,我必须按后退按钮!
这是我初始化 PlacePicker 的方式:
/**
* Add New Address
*/
mNewButton.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View view, MotionEvent motionEvent)
{
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
try
{
startActivityForResult(builder.build(AddressPickerActivity.this), ADDRESS_CODE);
}
catch (GooglePlayServicesRepairableException | GooglePlayServicesNotAvailableException e)
{
int status = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(AddressPickerActivity.this);
GoogleApiAvailability.getInstance().getErrorDialog(AddressPickerActivity.this, status, 100).show();
}
return false;
}
});
这就是我收听结果的方式:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == ADDRESS_CODE)
{
if (resultCode == RESULT_OK)
{
Log.d(TAG, "Google PlacePicker finished");
// Do Stuff then finish current activity too
AddressPickerActivity.this.setResult(RESULT_OK);
AddressPickerActivity.this.finish();
}
}
}
问题是:我没有收到日志消息“Google PlacePicker finished
”,除非我按下地点选择器上的后退按钮!之后一切照常进行,我想要执行的操作也正常(意味着地址已被正确选择)
有一个类似的问题 here,评论表明调用者 activity 可能在清单中有 android:noHistory="true"
。但是我查了一下,不是。这是我清单中的相应片段:
<activity
android:name=".AddressPickerActivity"
android:theme="@style/AppThemeNoActionBar" />
这可能是什么原因造成的?
编辑 1:
我还尝试将 android:noHistory="false"
显式添加到清单中。没有变化。
你可以使用OnClickListener
或者尝试为startActivityForResult添加if条件MotionEvent.ACTION_UP
,因为恰好PlacePicker被打开了两次。
mNewButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if(motionEvent.getAction() == MotionEvent.ACTION_UP){
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
try {
startActivityForResult(builder.build(AddressPickerActivity.this), ADDRESS_CODE);
} catch (GooglePlayServicesRepairableException | GooglePlayServicesNotAvailableException e) {
int status = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(AddressPickerActivity.this);
GoogleApiAvailability.getInstance().getErrorDialog(AddressPickerActivity.this, status, 100).show();
}
}
return false;
}
});
我在 Android 应用程序中使用 Google PlacePicker。我可以将它用于 select 个地址。但是,一旦地址被 selected,它就不会 return 给调用者 activity。相反,我必须按后退按钮!
这是我初始化 PlacePicker 的方式:
/**
* Add New Address
*/
mNewButton.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View view, MotionEvent motionEvent)
{
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
try
{
startActivityForResult(builder.build(AddressPickerActivity.this), ADDRESS_CODE);
}
catch (GooglePlayServicesRepairableException | GooglePlayServicesNotAvailableException e)
{
int status = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(AddressPickerActivity.this);
GoogleApiAvailability.getInstance().getErrorDialog(AddressPickerActivity.this, status, 100).show();
}
return false;
}
});
这就是我收听结果的方式:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == ADDRESS_CODE)
{
if (resultCode == RESULT_OK)
{
Log.d(TAG, "Google PlacePicker finished");
// Do Stuff then finish current activity too
AddressPickerActivity.this.setResult(RESULT_OK);
AddressPickerActivity.this.finish();
}
}
}
问题是:我没有收到日志消息“Google PlacePicker finished
”,除非我按下地点选择器上的后退按钮!之后一切照常进行,我想要执行的操作也正常(意味着地址已被正确选择)
有一个类似的问题 here,评论表明调用者 activity 可能在清单中有 android:noHistory="true"
。但是我查了一下,不是。这是我清单中的相应片段:
<activity
android:name=".AddressPickerActivity"
android:theme="@style/AppThemeNoActionBar" />
这可能是什么原因造成的?
编辑 1:
我还尝试将 android:noHistory="false"
显式添加到清单中。没有变化。
你可以使用OnClickListener
或者尝试为startActivityForResult添加if条件MotionEvent.ACTION_UP
,因为恰好PlacePicker被打开了两次。
mNewButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if(motionEvent.getAction() == MotionEvent.ACTION_UP){
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
try {
startActivityForResult(builder.build(AddressPickerActivity.this), ADDRESS_CODE);
} catch (GooglePlayServicesRepairableException | GooglePlayServicesNotAvailableException e) {
int status = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(AddressPickerActivity.this);
GoogleApiAvailability.getInstance().getErrorDialog(AddressPickerActivity.this, status, 100).show();
}
}
return false;
}
});