zoukankan      html  css  js  c++  java
  • Android开发——GPS定位

    1.LocationManager

    LocationManager系统服务是位置服务的核心组件,它提供了一系列方法来处理与位置相关的问题。

    与LocationManager相关的两个知识点:

    1.1 provider

    LocationManager获取位置信息的途径,常用的有两种:GPS和NETWORK。GPS定位更精确,缺点是只能在户外使用,耗电严重,速度较慢NETWORK通过蜂窝网络或无线网络来获取位置信息,室内室外均可用,速度较快,耗电较少。

    为了获取用户位置信息,我们可以使用其中一个,也可以同时使用两个。

    1.2LocationListener

    位置监听器接口,定义了常见的provider状态变化和位置的变化的方法,我们需要实现此接口,完成自己的处理逻辑,然后让LocationManager注册此监听器,完成对各种状态的监听。


    2.LocationManager的使用

    一般情况下,在Service里使用比较常用。

    public class GPSService extends Service {
        private LocationManager lm;
        private MyLocationListener listener;
        @Override
        public IBinder onBind(Intent intent) {
            // TODO Auto-generated method stub
            return null;
        }
        @Override
        public void onCreate() {
            // TODO Auto-generated method stub
            super.onCreate();
            lm = (LocationManager) getSystemService(LOCATION_SERVICE);
            listener = new MyLocationListener();
            // 注册监听位置服务
            // 给位置提供者设置条件
            Criteria criteria = new Criteria();
            criteria.setAccuracy(Criteria.ACCURACY_FINE);
            String proveder = lm.getBestProvider(criteria, true);
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                    && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                return;
            }
            lm.requestLocationUpdates(proveder, 0, 0, listener);
            //注册位置更新监听(最小时间间隔为5秒,最小距离间隔为5米)
            //lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5, listener);
        }
        @Override
        public void onDestroy() {
            super.onDestroy();
            // 取消监听位置服务
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                    && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                return;
            }
            lm.removeUpdates(listener);
            listener = null;
        }
    
        class MyLocationListener implements LocationListener{
            /**
             * 当位置改变的时候回调
             */
            @Override
            public void onLocationChanged(Location location) {
                String longitude = "j:" + location.getLongitude() + "
    ";
                String latitude = "w:" + location.getLatitude() + "
    ";
                String accuracy = "a" + location.getAccuracy() + "
    ";
            }
    
            /**
             * 当状态发生改变的时候回调 开启--关闭 ;关闭--开启
             */
            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
                // TODO Auto-generated method stub
            }
    
            /**
             * 某一个位置提供者可以使用了
             */
            @Override
            public void onProviderEnabled(String provider) {
                // TODO Auto-generated method stub
            }
    
            /**
             * 某一个位置提供者不可以使用了
             */
            @Override
            public void onProviderDisabled(String provider) {
                // TODO Auto-generated method stub
            }
        }
    }


  • 相关阅读:
    js 中for forEach map some every的区别
    2019.3.27面试
    js中的继承
    关于iPhone手机上的浏览器、微信内置浏览器不识别yyyy-mm-dd格式的时间显示为NaN问题
    一个有关ajax去获取天气预报然后用echarts展现出来的小demo
    js中var和let的快速区别
    配置服务器-------------适合小白和从未接触过服务器的人阅读
    .net core 响应的json数据驼峰显示问题。
    asp .net core中swagger的简单使用
    关于修改.net core webapi中null默认返回的状态码。
  • 原文地址:https://www.cnblogs.com/qitian1/p/6461614.html
Copyright © 2011-2022 走看看