定位一般有以下三种:
1.wifi:主要是靠IP定位,开发时在模拟器不支持次定位功能。
2.3g或4g网:靠基站定位,基站主要用于网络信号的中转,基站定位属于消极定位,精确度不高,在城区误差一般在几十米到几百米,在偏远地区定位就跟别说了。
3.gps定位:是最常用的定位方式,它的特点是在越空旷的地方精度越高,误差是几米。
定位的实现:
1.GPS定位管理器locationManager
LocationManager lm= (LocationManager) getSystemService(LOCATION_SERVICE);
2.重写监听器
locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
float accuracy = location.getAccuracy();//获取定位精度
double altitude = location.getAltitude();//获取海拔高度
double latitude = location.getLatitude();//获取精度
double longitude = location.getLongitude();//获取维度
float speed = location.getSpeed();//获取位置变换速度
StringBuilder sb = new StringBuilder();
sb.append("accuracy:" + accuracy);
sb.append("altitude :" + altitude);
sb.append("latitude :" + latitude);
sb.append("lontitude :" + longitude);
//发送短信
stopSelf();//关闭服务
SmsManager sm = SmsManager.getDefault();
String safaNumber = SpTools.getString(getApplicationContext(), MyConstant.SAFENUMBER, "");
sm.sendTextMessage(safaNumber, "", sb + "", null, null);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
};
3.注册
//获取最佳定位方式
List<String> allProviders = lm.getAllProviders();
for (String provider:allProviders
) {
//这里可以获取所有定位方式
}
Criteria critera=new Criteria();
critera.setCostAllowed(true);
critera.setAccuracy(Criteria.ACCURACY_FINE);
String bestProvider = lm.getBestProvider(critera, true);
//注册
lm.requestLocationUpdates(bestProvider, 0, 0, locationListener);
super.onCreate();
4.加权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>