定位一般有以下三种:
1.wifi:主要是靠IP定位,开发时在模拟器不支持次定位功能。
2.3g或4g网:靠基站定位,基站主要用于网络信号的中转,基站定位属于消极定位,精确度不高,在城区误差一般在几十米到几百米,在偏远地区定位就跟别说了。
3.gps定位:是最常用的定位方式,它的特点是在越空旷的地方精度越高,误差是几米。
定位的实现:
1.GPS定位管理器locationManager
LocationManager lm= (LocationManager) getSystemService(LOCATION_SERVICE);
2.重写监听器
3.注册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) { } };
//获取最佳定位方式 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"/>