Set current location to place autocomplete fragment

I want to set the current place to a place autocomplete fragment when creating an action.

I can download the Google Maps API, and I have successfully implemented an autocomplete snippet in my application. But I want to place an autocomplete fragment to set the current place as the default string in place of the autocomplete fragment. Like Uber. When we open Uber and click on the edit text saying "Where to?" he asks us to enter or find a destination, and he will automatically set the location to the current location. My code is below:

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.os.Build;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import com.google.android.gms.common.api.Status;
import com.google.android.gms.location.places.Place;
import com.google.android.gms.location.places.PlaceDetectionApi;
import com.google.android.gms.location.places.ui.PlaceAutocompleteFragment;
import com.google.android.gms.location.places.ui.PlaceSelectionListener;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MapStyleOptions;
import com.google.android.gms.maps.model.MarkerOptions;

import java.util.Arrays;
import java.util.List;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

private GoogleMap mMap;
private static final int REQUEST_SEND_SMS = 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

    try {
        // Customise the styling of the base map using a JSON object defined
        // in a raw resource file.
        boolean success = mMap.setMapStyle(
                MapStyleOptions.loadRawResourceStyle(
                        this, R.raw.aubergine_maps_style_json));

        if (!success) {
            Log.e("MapsActivityRaw", "Style parsing failed.");
        }
    } catch (Resources.NotFoundException e) {
        Log.e("MapsActivityRaw", "Can't find style.", e);
    }

    // Add a marker in Sydney and move the camera
    /* LatLng sydney = new LatLng(-34, 151);
    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); */
    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Criteria criteria = new Criteria();

    if(Build.VERSION.SDK_INT >=23){
        if (Build.VERSION.SDK_INT >= 23) {
            if (checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {

            } else {
                if (shouldShowRequestPermissionRationale(android.Manifest.permission.ACCESS_FINE_LOCATION) || shouldShowRequestPermissionRationale(android.Manifest.permission.ACCESS_COARSE_LOCATION)) {
                }
                requestPermissions(new String[]{
                        android.Manifest.permission.ACCESS_FINE_LOCATION,
                        android.Manifest.permission.ACCESS_COARSE_LOCATION
                }, REQUEST_SEND_SMS);
            }
        }
    }

    Location location = getLastKnownLocation();

    if (location != null)
    {
        this.mMap.getUiSettings().setMyLocationButtonEnabled(false);
        this.mMap.setMyLocationEnabled(true);

        GPSTracker tracker = new GPSTracker(this);
        double latitude = 0;
        double longitude = 0;
        if (!tracker.canGetLocation()) {
            tracker.showSettingsAlert();
        } else {
            latitude = tracker.getLatitude();
            longitude = tracker.getLongitude();
        }

        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), 15));
    } else {
        Toast.makeText(getApplicationContext(), "Location Is Null", Toast.LENGTH_LONG).show();
    }

    PlaceAutocompleteFragment autocompleteFragment = (PlaceAutocompleteFragment)
            getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);

    autocompleteFragment.setText("");

    autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
        @Override
        public void onPlaceSelected(Place place) {
            // TODO: Get info about the selected place.
            System.out.println("Place Name: " + place.getName());
            System.out.println("Place ID: " + place.getId());
            System.out.println("Place Address: " + place.getAddress());
            System.out.println("Place LatLng: " + place.getLatLng());
            String latLng = place.getLatLng().toString();
            latLng = latLng.replace("lat/lng: (", "");
            latLng = latLng.replace(")","");
            String[] latLngArray = latLng.split(",");
            System.out.println("Latitude Only: " + latLngArray[0]);
            System.out.println("Longitude Only: " + latLngArray[1]);

            mMap.clear();

            mMap.addMarker(new MarkerOptions()
                    .position(new LatLng(Double.parseDouble(latLngArray[0]), Double.parseDouble(latLngArray[1])))
                    .title(place.getName().toString())
            );
        }

        @Override
        public void onError(Status status) {
            // TODO: Handle the error.
            System.out.println("An error occurred: " + status);
        }
    });

}

private Location getLastKnownLocation() {
    LocationManager mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);;
    List<String> providers = mLocationManager.getProviders(true);
    Location bestLocation = null;
    for (String provider : providers) {
        if(Build.VERSION.SDK_INT >=23){
            if (Build.VERSION.SDK_INT >= 23) {
                if (checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {

                } else {
                    if (shouldShowRequestPermissionRationale(android.Manifest.permission.ACCESS_FINE_LOCATION) || shouldShowRequestPermissionRationale(android.Manifest.permission.ACCESS_COARSE_LOCATION)) {
                    }
                    requestPermissions(new String[]{
                            android.Manifest.permission.ACCESS_FINE_LOCATION,
                            Manifest.permission.ACCESS_COARSE_LOCATION
                    }, REQUEST_SEND_SMS);
                }
            }
        }
        Location l = mLocationManager.getLastKnownLocation(provider);
        System.out.println("last known location, provider: %s, location: %s");

        if (l == null) {
            continue;
        }
        if (bestLocation == null
                || l.getAccuracy() < bestLocation.getAccuracy()) {
            System.out.println("found best last known location: %s");
            bestLocation = l;
        }
    }
    if (bestLocation == null) {
        return null;
    }
    return bestLocation;
}
}
+4
source share
1 answer

        <android.support.v7.widget.CardView
        android:layout_marginTop="60dp"
        android:layout_height="50dp"
        android:layout_width="match_parent"
        android:id="@+id/cardView">
        <fragment  android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/place_autocomplete_fragment"
            android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment"
            />

XML- android , java , autocom() onCreate Mainefest

private void autocom()
{
    PlaceAutocompleteFragment autocompleteFragment = (PlaceAutocompleteFragment)
            getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);

    autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
        @Override
        public void onPlaceSelected(Place place) {
            LatLng string_location = place.getLatLng();
            String address = (String) place.getAddress();
            String name = (String) place.getName();
            // Log.i("LocationLatlang", String.valueOf(string_location));
            //Log.i("LocationAddress", address);
            //Log.i("Locationname", name);
            //Log.i("pppp", "Place: " + place.getName());

        }

        @Override
        public void onError(Status status) {
            Log.i("ppperror", "An error occurred: " + status);
        }
    });
}
0

Source: https://habr.com/ru/post/1671248/


All Articles