android典型代码系列(十六)------GPS定位
2015-12-04 14:15
375 查看
13GPS定位 :
补充:
它其实是一个条件设定是选择
你要是想用network定位你就要改变这个设定条件 或者 直接用设定provider为network类型的了
补充说明:
import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.text.TextUtils; /** * 保证这个类只存在一个实例 */ public class GPSInfoProvider { LocationManager manager; private static GPSInfoProvider mGPSInfoProvider; private static Context context; private static MyLoactionListener listener; //1.私有化构造方法 private GPSInfoProvider(){}; //2. 提供一个静态的方法,可以返回他的一个实例(synchronized:保证这个方法里面的逻辑必须全部执行) public static synchronized GPSInfoProvider getInstance(Context context){ if(mGPSInfoProvider==null){ mGPSInfoProvider = new GPSInfoProvider(); GPSInfoProvider.context = context; } return mGPSInfoProvider; } // 3.获取gps 信息 public String getLocation(){ manager =(LocationManager) context.getSystemService(Context.LOCATION_SERVICE); //manager.getAllProviders();//获取当前手机支持的定位方式 String provider = getProvider(manager); /* 注册位置的监听器 第一个参数:定位方式,GPS,AGPS,基站 第二个参数:每隔多长时间(ms)获取一下当前手机的位置(推荐1分钟) 第三个参数:位置每改变多少米获取一下位置信息 第四个参数:当位置发生改变的时候所对应的的回调方法 */ manager.requestLocationUpdates(provider,60000, 50, getListener()); SharedPreferences sp = context.getSharedPreferences ("config", Context.MODE_PRIVATE); String location = sp.getString("location", ""); return location; } /** @param manager 位置管理服务 * @return 最好的位置提供者*/ private String getProvider(LocationManager manager){ Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE);//经度,这里表示精准定位 criteria.setAltitudeRequired(false);//是否对海拔信息敏感 criteria.setPowerRequirement(Criteria.POWER_MEDIUM);//设置GPS定位对耗电性能要求 criteria.setSpeedRequired(true);//设置是否对速度的变化敏感 criteria.setCostAllowed(true);//true:允许产生一些开销,与运行商通信等 //第一个参数:一组查询条件,耗电?经纬度?海拔等 //第二个参数:true:返回那些已经被打开的设备,false:返回全部可以的位置提供者 return manager.getBestProvider(criteria, true); } private synchronized MyLoactionListener getListener(){ if(listener==null){ listener = new MyLoactionListener(); } return listener; } private class MyLoactionListener implements LocationListener{ /**当手机位置发生改变的时候 调用的方法 */ public void onLocationChanged(Location location) { String latitude ="latitude "+ location.getLatitude(); //纬度 String longtitude = "longtitude "+ location.getLongitude(); //经度 SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE); Editor editor = sp.edit(); editor.putString("location", latitude+" - "+ longtitude); editor.commit(); //最后一次获取到的位置信息 存放到sharedpreference里面 } /**某一个设备的状态发生改变的时候 调用 可用->不可用 不可用->可用*/ public void onStatusChanged(String provider, int status, Bundle extras) { } /**某个设备被打开*/ public void onProviderEnabled(String provider) {} /**某个设备被禁用 */ public void onProviderDisabled(String provider) {} } // 4. 停止gps监听(很重要) public void stopGPSListener(){ manager.removeUpdates(getListener()); } }
补充:
Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE);//设置为最大精度 criteria.setAltitudeRequired(false);//不要求海拔信息 criteria.setBearingRequired(false);//不要求方位信息 criteria.setCostAllowed(true);//是否允许付费 criteria.setPowerRequirement(Criteria.POWER_LOW);//对电量的要求
它其实是一个条件设定是选择
provider的用的
String provider = locationManager.getBestProvider(criteria, true);这个方法是根据你设定的条件找到的最优的
provider
你要是想用network定位你就要改变这个设定条件 或者 直接用设定provider为network类型的了
补充说明:
LocationManager.GPS_PROVIDER:GPS,精度比较高,但是慢而且消耗电力,而且可能因为天气原因或者障碍物而无法获取卫星信息,另外设备可能没有GPS模块;
LocationManager.NETWORK_PROVIDER:通过网络获取定位信息,精度低,耗电少,获取信息速度较快,不依赖GPS模块。
相关文章推荐
- android典型代码系列(十五)------字节转KB_MB_GB方法
- 自定义view 使用canvas画动态图
- android典型代码系列(十四)------子线程中弹出土司的方法
- android典型代码系列(十三)------通过反射获得未暴露的方法
- android典型代码系列(十二)------删除某个文件夹里面的所有内容(递归)
- android studio 导入项目Gradle版本不一致问题解决方法【android studio】
- 016Handler的使用
- android典型代码系列(十一)------判断某个应用程序是 不是三方的应用程序
- Android 用Intent调用系统中经常被用到的组件
- android典型代码系列(十)------获取一个应用程序的权限信息(反射)
- Android 4.4前后版本读取图库图片和拍照完美解决方案
- android(8)(获取手机系统内存和SD卡内存信息)
- android典型代码系列(九)------电话拦截
- github android 控件集群
- 三步搞定Android应用底部导航栏
- android - OOM Bitmap too large to be uploaded into a texture
- android典型代码系列(八)------传递一个String进行MD5编码
- Android开发日记(二)
- android-取URI下file或Content对应的文件
- android典型代码系列(六)------drawable图片转换为48dip的bitmap