android:改进查找当前位置
我想在android上查找当前用户位置 我使用以下代码:android:改进查找当前位置,android,google-maps,android-fusedlocation,Android,Google Maps,Android Fusedlocation,我想在android上查找当前用户位置 我使用以下代码: mLocationRequest = LocationRequest.create(); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); mLocationRequest.setInterval(1000); // Update location every second if (ContextCompat.chec
mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setInterval(1000); // Update location every second
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
mMap.setMyLocationEnabled( true );
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
mGoogleApiClient);
if (mLastLocation != null) {
lat = String.valueOf(mLastLocation.getLatitude());
lon = String.valueOf(mLastLocation.getLongitude());
}
firstLoction();
}
else
{
Toast.makeText(this, "Not promisseion", Toast.LENGTH_SHORT).show();
}
它适用于某些网络(数据移动)。但并非适用于所有位置。
(还可与GPS配合使用)
我可以做更多的事情来更好地处理网络吗?让您的活动实现LocationListener接口,然后利用FusedLocationApi,该API负责所有可用的提供商(例如GPS、网络)
Context ctx = this;
gpsLocationListener = new OLL(ctx);
networkLocationListener = new OLL(ctx);
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location temploc = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (useGPS) {
if (lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,
5000, 1, gpsLocationListener);
}
}
if (lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
5000, 1, networkLocationListener);
}
public class OLL implements LocationListener {
Context ctx;
private final static String TAG = "TAG";
public OVoidLL(Context ctx) {
this.ctx = ctx;
}
@Override
public void onLocationChanged(Location location) {
Log.d(TAG, location.toString);
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
在onConnected方法中,您需要按照以下步骤进行操作:
@Override
public void onConnected(Bundle connectionHint) {
LocationRequest request = new LocationRequest();
request.setInterval(10000);
request.setFastestInterval(5000);
request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
// using fused location api, taking care of all
// available providers (e.g. GPS, NETWORK)
// here do not forget to check for available LOCATION
// permission before asking for updates
LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient, request, this);
}
由于您的活动实现LocationListener接口,您将在onLocationChanged方法中接收更新
@Override
public void onLocationChanged(Location location) {
// this method is defined by LocationListener interface
// here you will receive location updates based
// on fused location api
}
有关如何改进代码以减少蓄电池电量消耗的更多详细信息,请参阅
我看到你在活动中使用谷歌地图。也可以使用GoogleMap对象的方法setOnMyLocationChangeListener直接从该对象获取当前位置。不幸的是,此方法现在已被弃用,因此建议使用FusedLocationProviderApi。使您的活动实现LocationListener接口,然后利用FusedLocationApi,该API将负责所有可用的提供程序(例如GPS、网络) 在onConnected方法中,您需要按照以下步骤进行操作:
@Override
public void onConnected(Bundle connectionHint) {
LocationRequest request = new LocationRequest();
request.setInterval(10000);
request.setFastestInterval(5000);
request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
// using fused location api, taking care of all
// available providers (e.g. GPS, NETWORK)
// here do not forget to check for available LOCATION
// permission before asking for updates
LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient, request, this);
}
由于您的活动实现LocationListener接口,您将在onLocationChanged方法中接收更新
@Override
public void onLocationChanged(Location location) {
// this method is defined by LocationListener interface
// here you will receive location updates based
// on fused location api
}
有关如何改进代码以减少蓄电池电量消耗的更多详细信息,请参阅
我看到你在活动中使用谷歌地图。也可以使用GoogleMap对象的方法setOnMyLocationChangeListener直接从该对象获取当前位置。不幸的是,此方法现在已被弃用,因此建议使用FusedLocationProviderApi。通过如何在Android应用程序中获取和使用位置数据查看此方法通过如何在Android应用程序中获取和使用位置数据查看此方法您不应使用getLastLocation。构建LocationRequest后,应根据此请求请求更新,并实现LocationListener接口以接收更新。不应使用getLastLocation。构建LocationRequest后,您应该基于此请求请求更新,并实现LocationListener接口以接收更新。