试图从位置选择器获取位置,但它会打开和关闭

时间:2019-03-08 05:21:04

标签: android google-places-api gmsplacepicker

我正在集成位置选择器,但是我已经启用了位置api,但是它会立即打开和关闭。

我创建了api密钥并将其放在清单文件中 仍然无法正常工作。在我的logcat中,它给我错误

  

2019-03-08 10:31:41.640 2837-2358 /? E / Places:您的应用似乎未启用Android的Places API。有关更多详细信息,请参见https://developers.google.com/places/android/signup。   2019-03-08 10:31:41.651 4713-4713 /? E / Places:由于PLACES_API_ACCESS_NOT_CONFIGURED而关闭了位置选择器   2019-03-08 10:31:41.775 2837-2358 /? E / Places:您的应用似乎未启用Android的Places API。有关更多详细信息,请参见https://developers.google.com/places/android/signup。   2019-03-08 10:31:41.776 2837-2358 /? E / AsyncOperation:serviceID = 65,操作= SearchPlaces       OperationException [Status {statusCode = PLACES_API_ACCESS_NOT_CONFIGURED,resolution = null}]

这是我的代码

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


 @SuppressLint("MissingPermission")
    private void showPlacePicker() {
        PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
        try {
            startActivityForResult(builder.build(NewOrderActivity.this), PLACE_PICKER_REQUEST);
        } catch (GooglePlayServicesRepairableException e) {
            e.printStackTrace();
        } catch (GooglePlayServicesNotAvailableException e) {
            e.printStackTrace();
        }
    }

  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == PLACE_PICKER_REQUEST) {

            if (resultCode == RESULT_OK) {
                Place place = PlacePicker.getPlace(data, NewOrderActivity.this);
                edt_pickup_address.setText(place.getAddress());
                Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());
                try {
                    List<Address> listAddresses = geocoder.getFromLocation(place.getLatLng().latitude, place.getLatLng().longitude, 1);
                    if (null != listAddresses && listAddresses.size() > 0) {
                      /*  post_area = listAddresses.get(0).getSubLocality();
                        post_city = listAddresses.get(0).getSubAdminArea();
                        post_state = listAddresses.get(0).getAdminArea();*/

                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }


                String place_phone_number = "" + place.getPhoneNumber();
                if (!TextUtils.isEmpty(place_phone_number)) {
                    String[] phone_number = place_phone_number.split(" ");
                    String s = "";
                    for (int i = 0; i < phone_number.length; i++) {
                        if (i != 0) {
                            s = s + phone_number[i];
                        }
                    }
//                    et_contact_no_add_company.setText(s);
                } else {
//                    et_contact_no_add_company.setText("");
                }
                if (place.getWebsiteUri() != null) {
//                    et_website_add_company.setText("" + place.getWebsiteUri());
                } else {
//                    et_website_add_company.setText("");
                }
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

根据Google的新更新Place Picker Deprecate,以后将不再提供,这是官方声明

  

弃用通知:地点选择器

     

通知:自2019年1月29日起,Place Picker(Android,iOS)已弃用。此功能将于2019年7月29日关闭,   在该日期之后将不再可用。要继续使用   弃用了适用于iOS v.2.7.0的Places SDK for Place Picker   期间,请勿禁用iOS版Places SDK。阅读迁移   指南(Android,iOS)以了解更多信息。

因此,另一面您可以使用Place Autocomplete

但是在新的Place API中有一些限制,您必须启用结算帐户才能使用Place Autocomplete。

  

提醒:要使用Places API,您必须获取API密钥,并且必须   启用计费。您可以在获得API密钥后启用计费功能(请参阅   快速指南)或作为单独的流程(请参见使用情况和帐单)。

替代解决方案:使用Geocoder

从地名中获取latLong

答案 1 :(得分:0)

弃用通知:Android版Places SDK的Google Play服务版本

ndroid

请参考此链接

https://developers.google.com/places/android-sdk/autocomplete