您的位置:首页 > 移动开发 > Android开发

Android获取当前位置的经纬度

2017-03-08 18:15 405 查看

前言

有些APP只是想简单的获取当前位置的经纬度,不想使用第三方定位(百度,高德)。那么我这里就说说利用SDK自带的LocationManager 类来获取当前的经纬度。这里实现分别通过GPS或NetWork来获取当前设备的经纬度。

1,因为GPS有时候信号弱会出现getLastKnownLocation为null,这时候我就采取网络来获取当前的位置。

主要代码如下:

/**
* 获取经纬度
*
* @param context
* @return
*/
private String getLngAndLat(Context context) {
double latitude = 0.0;
double longitude = 0.0;
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {  //从gps获取经纬度
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
} else {//当GPS信号弱没获取到位置的时候又从网络获取
return getLngAndLatWithNetwork();
}
} else {    //从网络获取经纬度
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, locationListener);
Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
return longitude + "," + latitude;
}

//从网络获取经纬度
public String getLngAndLatWithNetwork() {
double latitude = 0.0;
double longitude = 0.0;
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, locationListener);
Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
return longitude + "," + latitude;
}

LocationListener locationListener = new LocationListener() {

// Provider的状态在可用、暂时不可用和无服务三个状态直接切换时触发此函数
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}

// Provider被enable时触发此函数,比如GPS被打开
@Override
public void onProviderEnabled(String provider) {

}

// Provider被disable时触发此函数,比如GPS被关闭
@Override
public void onProviderDisabled(String provider) {

}

//当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发
@Override
public void onLocationChanged(Location location) {
}
};


2,记得在清单文件中加入以下权限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>


Demo地址:https://github.com/Alpha58/LocationDemo
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: