Android 获取经纬度处理

处理一:

 接入百度,高德,腾讯地图提供的获取经纬度的sdk;

优点:接入流程相对简单,不用处理网络和GPS定位的切换和获取以及各个经纬度(gcj02,bd09,wgs84)转换问题,技术相对成熟。

缺点:需要引入sdk包增加app的包的大小,存在一定的机型适配问题,

处理二:

使用Android提供的API,自己处理逻辑:

优点:增加的app大小可以接受,内部逻辑可预期,

缺点:需要自己处理网络和GPS定位的切换和获取以及各个经纬度(gcj02,bd09,wgs84)转换问题。

下面是实现自己实现API获取经纬度的代码:

1. 获取请求经纬度的权限,这里就不做详细介绍了,需要请求的权限如下

<!--  获取位置信息需要的权限 -->
<!-- Allows an app to access approximate location.  -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Allows an app to access precise location -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

2. 获取经纬度

 /**
   * 获取位置首先网络 ,如果网络没有站点列表,再次获取GPS获取位置
   */
    int mLatitude;
    int mLongitude;
    LocationManager mLocationManager;
    private String mBestProvider;
    private void getLocation() {
        mLatitude = 0;
        mLongitude = 0;
        //这里可以使用Application的上下文
        mLocationManager = (LocationManager)APP.getAppContext().getSystemService(Context.LOCATION_SERVICE);
             //如果是同时有GPS和网络定位的权限,我这里的需求精度不是很高 先使用了网络
            location = mLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
            if (location == null) {
                //试图请求GPS
                location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                // 到了这里说明,本地没有存储位置,需要重新获取一下
                if (location == null) {   
                    requestLocation();
                    return;
                }
            }
        
        // 到这里说明当前已经获取到经纬度了,直接处理后续的转换,应用了
        getAddress(location);

    }

3.重新请求经纬度

 private void requestLocation() {
         // 这里只获取一次的的方法
         // 需要更新就要使用这个方法LocationManager.requestLocationUpdates()
        mLocationManager.requestSingleUpdate(LocationManager.NETWORK_PROVIDER, new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {
                // 用完将监听移除
                mLocationManager.removeUpdates(this);
                // 到这里说明当前已经获取到经纬度了,直接处理后续的转换,应用了
                getAddress(location);
                
            }

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

            @Override
            public void onProviderEnabled(String provider) {
                
            }

            @Override
            public void onProviderDisabled(String provider) {
                
            }
        }, null);
    }

4. 当前写的是获取过程,请求权限和坐标转换没有写,有什么错误请留言,谢谢。

要在 Android 应用程序中获取经纬度,可以使用 Android 的定位服务。以下是一个简单的示例: 1. 在 AndroidManifest.xml 文件中添加以下权限: ```xml <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> ``` 2. 在代码中使用 LocationManager 和 LocationListener 来获取经纬度: ```java LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); LocationListener locationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { double latitude = location.getLatitude(); double longitude = location.getLongitude(); // 在此处使用经纬度 } @Override public void onStatusChanged(String provider, int status, Bundle extras) {} @Override public void onProviderEnabled(String provider) {} @Override public void onProviderDisabled(String provider) {} }; locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); ``` 上述代码中,我们使用了 LocationManager.requestLocationUpdates() 方法来注册一个 LocationListener 来监听位置变化。在监听回调中,我们可以从 Location 对象中获取经纬度。可以使用 LocationManager.GPS_PROVIDER 或 LocationManager.NETWORK_PROVIDER 来获取位置信息。如果您想停止位置更新,可以使用 LocationManager.removeUpdates() 方法。 请注意,在获取位置信息之前,您需要先检查用户是否已授予访问位置权限。您可以使用以下代码检查和请求权限: ```java if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1); } else { // 已授权 } ``` 上述代码中,我们使用了 ActivityCompat.requestPermissions() 方法来请求位置权限。如果用户授予了权限,您可以在 onRequestPermissionsResult() 回调中处理结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值