【问题标题】:Android PlacePicker does not return selected addressAndroid PlacePicker 不返回所选地址
【发布时间】: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


【解决方案1】:

您可以使用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;
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多