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);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
try {
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);
}
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) {
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) {
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;
}
}
source
share