zoukankan      html  css  js  c++  java
  • Android GPS 取经纬度

    1 // 获取位置管理服务
    2 private LocationManager locationManager;
    3 String mProviderName = "";
    1 private void onCreate(){
    2       locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);              
    3 }

    3.在onStart()

     1 @Override
     2     public void onStart() {
     3         super.onStart();
     4         if (getIntent() == null || getIntent().getStringExtra("city") == null
     5                 || "".equals(getIntent().getStringExtra("city"))) {
     6             if (openGPSSettings()) {
     7                 Location lastKnownLocation = null;
     8                 lastKnownLocation = locationManager
     9                         .getLastKnownLocation(LocationManager.GPS_PROVIDER);
    10                 mProviderName = LocationManager.GPS_PROVIDER;
    11                 if (lastKnownLocation == null) {
    12                     lastKnownLocation = locationManager
    13                             .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
    14                     mProviderName = LocationManager.NETWORK_PROVIDER;
    15                 }
    16                 if (mProviderName != null && !"".equals(mProviderName)) {
    17                     locationManager.requestLocationUpdates(mProviderName, 1000,
    18                             1, locationListener);
    19                 }
    20             }
    21         }
    22     }

    判断是否开启GPS:

     1 /** GPS模块是否存在或者是开启 **/
     2     private boolean openGPSSettings() {
     3         LocationManager alm = (LocationManager) this
     4                 .getSystemService(Context.LOCATION_SERVICE);
     5         if (alm.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)) {
     6             Toast.makeText(this, "GPS模块正常", Toast.LENGTH_SHORT).show();
     7             return true;
     8         }
     9 
    10         Toast.makeText(this, "请开启GPS!", Toast.LENGTH_SHORT).show();
    11         Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS);
    12         startActivityForResult(intent, 0); // 此为设置完成后返回到获取界面
    13         return false;
    14     }

    在onPause、onResume中处理locationManager

     1 /**
     2      * 这里一定要对LocationManager进行重新设置监听 mgr获取provider的过程不是一次就能成功的
     3      * mgr.getLastKnownLocation很可能返回null 如果只在initProvider()中注册一次监听则基本很难成功
     4      */
     5     @Override
     6     public void onResume() {
     7         super.onResume();
     8         if (locationManager != null && !Utils.isEmpty(mProviderName)) {
     9             locationManager.requestLocationUpdates(mProviderName, 1000, 1,
    10                     locationListener);
    11         }
    12     }
    13 
    14     @Override
    15     public void onPause() {
    16         super.onPause();
    17         // 取消注册监听
    18         if (locationManager != null) {
    19             locationManager.removeUpdates(locationListener);
    20         }
    21     }

    监听位置变化:

     1 private LocationListener locationListener = new LocationListener() {
     2 
     3         /**
     4          * 位置信息变化时触发
     5          */
     6         public void onLocationChanged(Location location) {
     7 
     8             updateToNewLocation(location);
     9         }
    10 
    11         /**
    12          * GPS状态变化时触发
    13          */
    14         public void onStatusChanged(String provider, int status, Bundle extras) {
    15             switch (status) {
    16             // GPS状态为可见时
    17             case LocationProvider.AVAILABLE:
    18                 // 当前GPS状态为可见状态
    19                 break;
    20             // GPS状态为服务区外时
    21             case LocationProvider.OUT_OF_SERVICE:
    22                 // 当前GPS状态为服务区外状态
    23                 break;
    24             // GPS状态为暂停服务时
    25             case LocationProvider.TEMPORARILY_UNAVAILABLE:
    26                 // 当前GPS状态为暂停服务状态
    27                 break;
    28             }
    29         }
    30 
    31         /**
    32          * GPS开启时触发
    33          */
    34         public void onProviderEnabled(String provider) {
    35             Location location = locationManager.getLastKnownLocation(provider);
    36             updateToNewLocation(location);
    37         }
    38 
    39         /**
    40          * GPS禁用时触发
    41          */
    42         public void onProviderDisabled(String provider) {
    43             updateToNewLocation(null);
    44         }
    45     };

    /** 服务管理对象的监听器 */
    // 绑定监听,有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获取详细地址信息。

     1 public void updateToNewLocation(final Location location) {
     2         if (location == null) {
     3             Toast.makeText(getApplicationContext(), "GPS定位失败",
     4                     Toast.LENGTH_SHORT).show();
     5             return;
     6         }
     7 
     8         Log.i("", "经度:" + location.getLongitude());
     9         Log.i("", "纬度:" + location.getLatitude());38  }

    开始启动监听位置变化时,可设置:

     1         String serviceName = Context.LOCATION_SERVICE;
     2         locationManager = (LocationManager) this.getSystemService(serviceName);
     3         // 查找到服务信息
     4         Criteria criteria = new Criteria();
     5         // 设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细
     6         criteria.setAccuracy(Criteria.ACCURACY_FINE);
     7         // 设置是否要求速度
     8         criteria.setSpeedRequired(false);
     9         // 设置是否需要海拔信息
    10         criteria.setAltitudeRequired(false);
    11         // 设置是否需要方位信息
    12         criteria.setBearingRequired(false);
    13         // 设置是否允许运营商收费
    14         criteria.setCostAllowed(true);
    15         // 设置对电源的需求
    16         criteria.setPowerRequirement(Criteria.POWER_LOW); // 低功耗
    17 
    18         // 为获取地理位置信息时设置查询条件
    19         String provider = locationManager.getBestProvider(criteria, true); // 获取GPS信息
    //如果不设置查询要求,getLastKnownLocation方法传人的参数为LocationManager.GPS_PROVIDER
    Location location = locationManager.getLastKnownLocation(provider);
    // 通过GPS获取位置
    updateToNewLocation(location);
  • 相关阅读:
    团队冲刺-1
    最优惠购买书籍
    gogoing软件NABCD
    二维数组首尾相连
    首尾相连一维数组的最大子数组和
    二维数组返回最大子矩阵之和
    石家庄铁道大学基础教学楼电梯使用调查
    子数组最大值求和
    返回一个整数数组中最大子数组的和-课堂训练(子数组为连续)
    软件工程概论-四则运算
  • 原文地址:https://www.cnblogs.com/CharlesGrant/p/4748475.html
Copyright © 2011-2022 走看看