Android GPS 取经纬度
2015-08-21 17:19
489 查看
// 获取位置管理服务 private LocationManager locationManager; 3 String mProviderName = "";
private void onCreate(){ locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); }
3.在onStart()
@Override public void onStart() { super.onStart(); if (getIntent() == null || getIntent().getStringExtra("city") == null || "".equals(getIntent().getStringExtra("city"))) { if (openGPSSettings()) { Location lastKnownLocation = null; lastKnownLocation = locationManager .getLastKnownLocation(LocationManager.GPS_PROVIDER); mProviderName = LocationManager.GPS_PROVIDER; if (lastKnownLocation == null) { lastKnownLocation = locationManager .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); mProviderName = LocationManager.NETWORK_PROVIDER; } if (mProviderName != null && !"".equals(mProviderName)) { locationManager.requestLocationUpdates(mProviderName, 1000, 1, locationListener); } } } }
判断是否开启GPS:
/** GPS模块是否存在或者是开启 **/ private boolean openGPSSettings() { LocationManager alm = (LocationManager) this .getSystemService(Context.LOCATION_SERVICE); if (alm.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)) { Toast.makeText(this, "GPS模块正常", Toast.LENGTH_SHORT).show(); return true; } Toast.makeText(this, "请开启GPS!", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS); startActivityForResult(intent, 0); // 此为设置完成后返回到获取界面 return false; }
在onPause、onResume中处理locationManager
/** * 这里一定要对LocationManager进行重新设置监听 mgr获取provider的过程不是一次就能成功的 * mgr.getLastKnownLocation很可能返回null 如果只在initProvider()中注册一次监听则基本很难成功 */ @Override public void onResume() { super.onResume(); if (locationManager != null && !Utils.isEmpty(mProviderName)) { locationManager.requestLocationUpdates(mProviderName, 1000, 1, locationListener); } } @Override public void onPause() { super.onPause(); // 取消注册监听 if (locationManager != null) { locationManager.removeUpdates(locationListener); } }
监听位置变化:
private LocationListener locationListener = new LocationListener() { /** * 位置信息变化时触发 */ public void onLocationChanged(Location location) { updateToNewLocation(location); } /** * GPS状态变化时触发 */ public void onStatusChanged(String provider, int status, Bundle extras) { switch (status) { // GPS状态为可见时 case LocationProvider.AVAILABLE: // 当前GPS状态为可见状态 break; // GPS状态为服务区外时 case LocationProvider.OUT_OF_SERVICE: // 当前GPS状态为服务区外状态 break; // GPS状态为暂停服务时 case LocationProvider.TEMPORARILY_UNAVAILABLE: // 当前GPS状态为暂停服务状态 break; } } /** * GPS开启时触发 */ public void onProviderEnabled(String provider) { Location location = locationManager.getLastKnownLocation(provider); updateToNewLocation(location); } /** * GPS禁用时触发 */ public void onProviderDisabled(String provider) { updateToNewLocation(null); } };
/** 服务管理对象的监听器 */
// 绑定监听,有4个参数
// 参数1,设备:有GPS_PROVIDER和NETWORK_PROVIDER两种
// 参数2,位置信息更新周期,单位毫秒
// 参数3,位置变化最小距离:当位置距离变化超过此值时,将更新位置信息
// 参数4,监听
// 备注:参数2和3,如果参数3不为0,则以参数3为准;参数3为0,则通过时间来定时更新;两者为0,则随时刷新
// 1秒更新一次,或最小位移变化超过1米更新一次;
// 注意:此处更新准确度非常低,推荐在service里面启动一个Thread,在run中sleep(10000);然后执行handler.sendMessage(),更新位置
// 设置监听器,自动更新的最小时间为间隔N秒(1秒为1*1000,这样写主要为了方便)或最小位移变化超过N米
处理经纬度信息,可以请求baidu获取详细地址信息。
public void updateToNewLocation(final Location location) { if (location == null) { Toast.makeText(getApplicationContext(), "GPS定位失败", Toast.LENGTH_SHORT).show(); return; } Log.i("", "经度:" + location.getLongitude()); Log.i("", "纬度:" + location.getLatitude()); }
开始启动监听位置变化时,可设置:
String serviceName = Context.LOCATION_SERVICE; locationManager = (LocationManager) this.getSystemService(serviceName); // 查找到服务信息 Criteria criteria = new Criteria(); // 设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细 criteria.setAccuracy(Criteria.ACCURACY_FINE); // 设置是否要求速度 criteria.setSpeedRequired(false); // 设置是否需要海拔信息 criteria.setAltitudeRequired(false); // 设置是否需要方位信息 criteria.setBearingRequired(false); // 设置是否允许运营商收费 criteria.setCostAllowed(true); // 设置对电源的需求 criteria.setPowerRequirement(Criteria.POWER_LOW); // 低功耗 // 为获取地理位置信息时设置查询条件 String provider = locationManager.getBestProvider(criteria, true); // 获取GPS信息
//如果不设置查询要求,getLastKnownLocation方法传人的参数为LocationManager.GPS_PROVIDER Location location = locationManager.getLastKnownLocation(provider); // 通过GPS获取位置 updateToNewLocation(location);
相关文章推荐
- Android 最火的快速开发框架XUtils
- Android之单选按钮,复选框使用方法汇总
- Android笔记:异步消息处理
- Android笔记:多线程
- Android 开发指南
- Android 浅谈 设计与屏幕适配 【1.6235449734285716】
- Android应用开发--颜色拾取器. color picker
- Android 自动注释,导入模板文件
- AndroidManifest.xml
- android TextView中文字通过SpannableString设置属性
- Android TextView 一些字体颜色、大小设置属性
- android 点击拨打电话发短信
- 实现带清除效果的EditText
- Ubuntu下FFmpeg-Android-master编译过程
- Android错误汇总集锦
- Android 5.0 如何修改指定sim卡拨号
- ANDROID定义自己的看法——onMeasure,MeasureSpec源代码 过程 思考具体解释
- android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
- Android笔记(十)ListView
- MacBook下Android Studio使用SVN两个小问题