被要求不用三方写一个定位,显示当前定位坐标,所以用Android自带的定位写了一个,这里记录一下,大家一起学习学习
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 0, locationListener);
//gps定位慢,精度高,用GPS定位,getLastKnowLocation()方法90%获取到的都是null
//最好从定位的监听里获取
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}else{ locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 500, 0, locationListener); location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); }
除了手动确定这两种定位方式,还可以让系统自动选择定位方式
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);//设置定位经纬度精度
criteria.setAltitudeRequired(false);//是否获得海拔信息
criteria.setBearingAccuracy(Criteria.ACCURACY_FINE);//方向精度
criteria.setBearingRequired(true);//是否获得方向
criteria.setCostAllowed(true);//是否可以付费
criteria.setSpeedAccuracy(Criteria.ACCURACY_FINE);//速度精度
criteria.setSpeedRequired(true);//是否获取速度
// criteria.setHorizontalAccuracy(Criteria.ACCURACY_HIGH);//水平方向的经纬度
// criteria.setVerticalAccuracy(Criteria.ACCURACY_HIGH);//垂直距离的海拔高度
criteria.setPowerRequirement(Criteria.POWER_LOW);//用电等级
String provider = locationManager.getBestProvider(criteria, true);
locationManager.requestLocationUpdates(500, 0, criteria, locationListener, Looper.myLooper());//.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 0, locationListener);
location = locationManager.getLastKnownLocation(provider);
定位的监听器是这个样子的
locationListener = new LocationListener() {
// Provider的状态在可用、暂时不可用和无服务三个状态直接切换时触发此函数
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
// Provider被enable时触发此函数,比如GPS被打开
@Override
public void onProviderEnabled(String provider) {
Toast.makeText(getApplicationContext(),provider + "被打开",Toast.LENGTH_LONG).show();
}
// Provider被disable时触发此函数,比如GPS被关闭
@Override
public void onProviderDisabled(String provider) {
Toast.makeText(getApplicationContext(),provider + "被关闭",Toast.LENGTH_LONG).show();
}
//当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发
@Override
public void onLocationChanged(final Location location) {
setLocation(location);
}
};
<uses-permission android:name="android.permission.INTERNET" />
<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
获取到定位以后,调用Geocoder获取定位信息
Geocoder gc = new Geocoder(getApplicationContext(), Locale.getDefault());
List<Address> fromLocation = gc.getFromLocation(lat, lon, 10);
这样就自己实现的定位了