【发布时间】:2023-03-21 11:45:01
【问题描述】:
我在我的 Android 应用中使用 Google PlacePicker。我可以用它来选择地址。但是,一旦选择了地址,它就不会返回调用者活动。相反,我必须按下返回按钮!
这就是我初始化 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 并且 cmets 建议调用者活动可能在清单中有android:noHistory="true"。但我查了一下,不是。这是我清单中相应的 sn-p:
<activity
android:name=".AddressPickerActivity"
android:theme="@style/AppThemeNoActionBar" />
这是什么原因造成的?
编辑1:
我还尝试将android:noHistory="false" 显式添加到清单中。没有变化。
【问题讨论】:
-
能否调试并显示您的
resultCode,好吗? -
由于我的日志语句显示,结果代码肯定是RESULT_OK
-
您的
AddressPickerActivity被打开了两次,因为onTouch被调用了两次。请使用OnClickListerner作为按钮。 -
谢谢,其实可能就是这样。我会试试看它是否能解决我的问题。
-
这实际上解决了我的问题。非常感谢。
标签: android google-maps google-places-api