Android 定位

定位所需权限:

LocationManager:

LocationManager manager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);

Location Provider:

android系统存在多种provider

1)GPS_PROVIDER: 手机里有GPS芯片,然后利用该芯片就能利用卫星获得自己的位置信息。 第一次时间慢,但定位精准

2)NETWORK_PROVIDER:利用网络定位,一般是利用手机基站和WIFI节点的地址来大致定位位置

3)PASSIVE_PROVIDER: 被动定位方式。这个意思也比較明显。就是用现成的,当其它应用使用定位更新了定位信息。系统会保存下来。该应用接收到消息后直接读取就能够了

    /**     * 判断设备 具备哪种定位provider     * 

* 优先采用 netWork *

* GPS 耗时耗电 * * @param locationManager * @return */ private String judgeProvider(LocationManager locationManager) { List prodiverlist = locationManager.getProviders(true); if (prodiverlist.contains(LocationManager.NETWORK_PROVIDER)) { return LocationManager.NETWORK_PROVIDER;//网络定位 } else if (prodiverlist.contains(LocationManager.GPS_PROVIDER)) { return LocationManager.GPS_PROVIDER;//GPS定位 (返回时间较长 第一次可能2-5分钟) } return null; }

获取定位信息

    /**     * 获取定位信息     *     * @return     */    @SuppressLint("MissingPermission")    public void getLocationInfo(Context context) {        manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);        if (null != manager) {            String provider = judgeProvider(manager);            if (null != provider) {                /**                 * 间隔时间 60 * 60 * 1000 ms                 * 间隔位置 1000 m                 *                 * @param minTime minimum time interval between location updates, in milliseconds                 * @param minDistance minimum distance between location updates, in meters                 */                manager.requestLocationUpdates(provider, 60 * 60 * 1000, 1000, locationListener);            }        }    }    private LocationListener locationListener = new LocationListener() {        /**         * 位置信息变化时触发         * @param location         */        @Override        public void onLocationChanged(Location location) {            Log.i(TAG, "时间:" + location.getTime());            Log.i(TAG, "经度:" + location.getLongitude());            Log.i(TAG, "纬度:" + location.getLatitude());            Log.i(TAG, "海拔:" + location.getAltitude());            //解析具体详细位置信息            if (null != location) {                getAddress(location);            }        }        /**         * GPS状态变化时触发         * @param provider         * @param status         * @param extras         */        @Override        public void onStatusChanged(String provider, int status, Bundle extras) {            switch (status) {                //GPS状态为可见时                case LocationProvider.AVAILABLE:                    Log.i(TAG, "当前GPS状态为可见状态");                    break;                //GPS状态为服务区外时                case LocationProvider.OUT_OF_SERVICE:                    Log.i(TAG, "当前GPS状态为服务区外状态");                    break;                //GPS状态为暂停服务时                case LocationProvider.TEMPORARILY_UNAVAILABLE:                    Log.i(TAG, "当前GPS状态为暂停服务状态");                    break;            }        }        /**         * GPS开启时触发         */        @Override        public void onProviderEnabled(String provider) {        }        /**         * GPS禁用时触发         */        @Override        public void onProviderDisabled(String provider) {        }    };

获取到Location之后,根据经纬度解析出详细的位置信息:

    /**     * 获取定位 详细信息     *     * @param location     * @return     */    private List getAddress(Location location) {        List result = null;        try {            if (location != null) {                Geocoder gc = new Geocoder(context, Locale.getDefault());                result = gc.getFromLocation(location.getLatitude(),                        location.getLongitude(), 1);            }        } catch (Exception e) {            e.printStackTrace();        }                return result;    }

在Address类中会有详细位置信息内容。

 

 

更多相关文章

  1. 自定义可拖拽的GridView
  2. Android(安卓)插拔sd广播
  3. 强大的 Android(安卓)属性动画 ObjectAnimator
  4. Android中wifi的HAL层
  5. android判断当前应用是否启动、app运行状态、某个界面是否在前台
  6. Android通过Termux安装scrapy遇到的问题和解决方法
  7. Android(安卓)开发(二) Android(安卓)Permission 中英文对照
  8. android emulator连接internet
  9. Android常用方法

随机推荐

  1. Apache Hive 联邦查询(Query Federation)
  2. Hadoop 气数已尽?
  3. Bert 改进: 如何融入知识
  4. 就最近看的paper谈谈预训练语言模型发展
  5. 一条 SQL 在 Apache Spark 之旅(下)
  6. GPU 显存不足怎么办?
  7. 中文自然语言处理相关的开放任务,数据集,以
  8. 显著不显著的后背是什么, 非(半)参估计里
  9. 华为最新年报发布:海外市场损失超百亿美金
  10. Linux下编译Qt 5版本源码