Реализовать средство выбора мест общего доступа, как в WhatsApp, без средства выбора мест, поскольку оно устарело - PullRequest
9 голосов
/ 18 мая 2019

У нас было требование предоставить доступ к местоположению, аналогичному WhatsApp в отношении пользовательского интерфейса и функциональности.

Я обнаружил, что Google Place Picker устарел, а также перенесен в Places Clients.

Скажите, как as,

, и когда они пытаются найти,

Может бытьЯ не очень хорош в объяснении своей идеи, но в целом я нахожусь в поиске вышеупомянутого вида реализации.

А также я узнал, что Google взимает плату за поиск или места из приведенного ниже URL,

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 голосов
/ 29 мая 2019

Я столкнулся с той же проблемой, так как я работаю с Place Pick в моем приложении, но так как 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, вы должны обработать cameraPosition с gps (если он доступен), а затем, как только вы захотите вернуться с результатом (для меня я нажимаю на кнопку 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, используя ";", чтобы отделить широту от долготы

надеюсь, мой пример кому-нибудь поможет!

...