由于不建议使用Places Picker,因此实现了与WhatsApp相同的共享位置Places Picker

时间:2019-05-18 10:48:42

标签: android kotlin google-places-api google-places googleplacesautocomplete

我们有一个共享位置的要求,这是与用户界面和功能类似的类似WhatsApp的位置。

我发现Google Place Picker已过时,并且已迁移到Places Clients。

像这样说

当他们尝试搜索时,

也许是,我不擅长解释我的想法,但总的来说,我正在寻找上述实现方法。

我也从下面的网址中得知Google会对搜索或地点收费,

https://github.com/rtchagas/pingplacepicker

我所累的是

编码部分:

Places.initialize(applicationContext, "Google API Key")
placesClient = Places.createClient(this)



val autocompleteFragment =
          getSupportFragmentManager().findFragmentById(R.id.autocomplete_fragment) as AutocompleteSupportFragment

autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME));

autocompleteFragment.setOnPlaceSelectedListener(object : PlaceSelectionListener {
            override fun onPlaceSelected(p0: Place) {
                TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
            }

            override fun onError(p0: Status) {
                TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
            }
        });

 val intent = Autocomplete.IntentBuilder(
            AutocompleteActivityMode.FULLSCREEN, fields
        )
            .build(this);
        startActivityForResult(intent, AUTOCOMPLETE_REQUEST_CODE);

在搜索了两个三个位置后,出现错误,提示重试。不知道原因。

错误:

enter image description here

我们非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

自从我在应用中使用地点选择器以来,我就面临着同样的问题,但是由于Google决定将其删除,因此我别无选择,只能寻找解决方法!

我决定使用Google地图来重新创建地点选择器的关闭体验。

首先,我将地图创建为全屏显示,然后将ImageView(标记)作为xml的叠加层放置在下面:

<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/coordinator_layout"
xmlns:app="http://schemas.android.com/apk/res-auto">
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.streetdev.goodnecity.SelectLocationPicker" />
    <ImageView
        android:layout_centerInParent="true"
        android:src="@drawable/ic_map"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="56dp"
    android:layout_height="56dp"
    app:backgroundTint="@color/colorPrimaryDark"
    android:src="@drawable/ic_plus"
    android:layout_margin="16dp"
    app:layout_anchor="@id/map"
    app:layout_anchorGravity="bottom|end" />
 </android.support.design.widget.CoordinatorLayout>

因此,每当用户在地图上导航时,标记都会像地点选择器

一样停留在地图中心。

现在您要做的就是使用startActivityForResult启动地图选择器,您必须使用 gps (如果有)来处理cameraPosition,然后尽快您想返回结果(对我来说,我单击Fab按钮),您可以通过以下方式获得结果:

            LatLng latng = mMap.getCameraPosition().target;
            Intent returnIntent = new Intent();
            returnIntent.putExtra("result",String.valueOf(latng.latitude)+";"+String.valueOf(latng.longitude));
            setResult(Activity.RESULT_OK,returnIntent);
            finish();

最后一步是在onActivityResult中处理结果,得到结果,然后使用split进行";"来将经度和纬度分开

希望我的例子对您有所帮助!