一起Talk Android吧(第五百二十一回:获取位置信息)

本文介绍了在Android中获取位置信息的概念和实现方法,包括使用LocationManager,请求ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION权限,以及创建位置监听器来获取经度和纬度。示例代码展示了如何通过GPS或网络提供商获取最新位置并注册更新监听器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


各位看官们大家好,上一回中咱们说的例子是"波浪进度条",这一回中咱们说的例子是" 获取位置信息"。闲话休提,言归正转, 让我们一起Talk Android吧!

概念介绍

位置信息就是我们在日常生活中的位置,比如"北京市东东城区天安门广场",更加专业的名称是经度和经度。在程序中获取位置信息后可以基于位置信息来提供相关的服
务,比如地图导航,外卖推荐。本章回中我们将介绍如何获取位置信息。

实现方法

  1. 申请位置权限ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION和网络权限INTERNET;
  2. 获取LocationManager
LocationManager locationManager =
(LocationManager)getSystemService(Context.LOCATION_SERVICE);
  1. 获取provide,常用的2种:GPS,NETWORK,
  List<String> locationProviders = locationManager.getProviders(true);
  1. 创建位置监听器并且注册监听器来监听位置变化;
locationManager.requestLocationUpdates(locationProvider,3000,1, listener);

我们通常会在注册监听器前先获取最近一次的位置信息,如果可以获取到就直接使用,否则再去注册监听器。获取最近一次位置信息的代码如下:

 Location location = locationManager.getLastKnownLocation(locationProvider);

创建监听器时需要重写监听器的onLocationChanged()方法,在该方法中可以获取位置信息:经度和纬度

示例代码

private double [] getLongitudeAndLatitude() {
    double result[] = new double[2];

    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    //默认使用GPS获取位置信息
    String locationProvider = LocationManager.GPS_PROVIDER;;
    List<String> locationProviders = locationManager.getProviders(true);

    LocationListener listener = new LocationListener() {
        @Override
        public void onLocationChanged(@NonNull Location location) {

            if(location == null ) {
                return;
            }

            if(location.getProvider() == null) {
                return;
            }
            result[0] = location.getLongitude();
            result[1] = location.getLatitude();

        }

        @Override
        public void onProviderDisabled(@NonNull String provider) {
           LocationListener.super.onProviderDisabled(provider);
        }

        @Override
        public void onProviderEnabled(@NonNull String provider) {
           LocationListener.super.onProviderEnabled(provider);
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            LocationListener.super.onStatusChanged(provider, status, extras);
        }
    };

    if(locationProviders.contains(LocationManager.GPS_PROVIDER)) {
        locationProvider = LocationManager.GPS_PROVIDER;
    } else if(locationProviders.contains(LocationManager.NETWORK_PROVIDER))  {
        locationProvider = LocationManager.NETWORK_PROVIDER;
    } else if(locationProviders.contains(LocationManager.PASSIVE_PROVIDER))  {
        locationProvider = LocationManager.PASSIVE_PROVIDER;
    } else if(locationProviders.contains(LocationManager.FUSED_PROVIDER))  {
        locationProvider = LocationManager.FUSED_PROVIDER;
    }else  {
        locationProvider = LocationManager.GPS_PROVIDER;
    }


    //获取上一次的位置信息(第一次运行时值为null)并且注册位置监听器
    Location location = locationManager.getLastKnownLocation(locationProvider);
    if(location != null) {
        result[0] = location.getLongitude();
        result[1] = location.getLatitude();
    }else {
        //监听位置变化,3s更新一次,位置为1m
//            locationManager.requestLocationUpdates(locationProvider,3000,1, listener);
        //监听位置变化,3s更新一次,太频繁,修改3分钟,位置为1m
        locationManager.requestLocationUpdates(locationProvider,3*60*1000,1, listener);
    }

    return  result;
}

上面是完整的示例代码,它和我们在实现方法中介绍的内容完全匹配,只有获取位置权限的内容没有示例代码,我们在下一章回中将介绍如何获取位置权限。

看官们,关于"获取位置信息"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值