use*_*444 5 android autocomplete
我想在创建活动时将当前地点设置为地点自动完成片段。
我能够加载Google Maps API,并且已经在我的应用程序中成功实现了Place Autocomplete Fragment。但是,我希望场所自动完成片段将当前场所设置为场所自动完成片段的默认字符串。就像Uber一样。当我们打开Uber并单击编辑文本时说:“去哪儿?” 它要求我们输入或搜索目的地位置,并自动将位置设置为当前位置。我的代码如下:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
Vag*_* Km -1
<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"
/>
Run Code Online (Sandbox Code Playgroud)
将其放入 android xml 代码中的某个布局(如相对)中,然后通过在 onCreate 方法中调用 autocom() 方法添加以下 java 代码,并在 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);
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2360 次 |
| 最近记录: |