实现共享位置地点选择器,与没有地点选择器的 WhatsApp 相同,因为它已被弃用

Posted

技术标签:

【中文标题】实现共享位置地点选择器,与没有地点选择器的 WhatsApp 相同,因为它已被弃用【英文标题】:Implement Sharing Location Places Picker same like WhatsApp without Places Picker Since it got deprecated 【发布时间】:2019-10-05 11:36:36 【问题描述】:

我们需要共享位置,这是与用户界面和功能类似的 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);

搜索两个三个地方后,我收到一条错误消息,提示“重试”。不知道原因。

错误:

非常感谢您的帮助。

【问题讨论】:

发布您的错误日志。 更新问题@Ninja 你能发布错误日志吗? 我正在启动一个 Intent AutocompleteActivityMode.FULLSCREEN。 你真的需要地方栏搜索吗? 【参考方案1】:

自从我在我的应用程序中使用 place picker 以来,我遇到了同样的问题,但由于谷歌决定删除它,我别无选择,只能找到解决方案!

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

首先,我将地图创建为全屏,然后将ImageView(标记)作为下面的 xml 覆盖:

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

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_
    android:layout_
    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>

因此,每当用户在地图上导航时,标记都会像 place picker

一样停留在地图的中心

现在您所要做的就是使用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 使用";" 来区分纬度和经度

希望我的例子能帮助一些人!

【讨论】:

以上是关于实现共享位置地点选择器,与没有地点选择器的 WhatsApp 相同,因为它已被弃用的主要内容,如果未能解决你的问题,请参考以下文章

Google 地点选择器在启动后立即关闭

地点选择器已弃用

适用于 Android 的 Google Place API:无法使用 Place Picker 的选择器选择地点

高德地图怎样实现实时定位,得到当前地点的坐标,位置

谷歌地方选择器 API 查询应用范围的地方?

如何从地点选择器活动中检索地图快照?