Android 获取定位的一些问题

最近在用红米手机进开发桌面小窗口是碰到一直获取不到定位获取当前经纬度,找了问题,一直在报没有定位缓存,原因就是手机上没有以前定位的数据;先来看下代码:

/**
 * GPS获取定位方式
 */
public static Location getGPSLocation(@NonNull Context context) {
    Location location = null;
    LocationManager manager = getLocationManager(context);
    //高版本的权限检查
    if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        return null;
    }
    if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {//是否支持GPS定位
        //获取最后的GPS定位信息,如果是第一次打开,一般会拿不到定位信息,一般可以请求监听,在有效的时间范围可以获取定位信息
        location = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    }
    return location;
}

这里重点是manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);为获取上一次定位的数据;那问题来了,我直接用请求监听的方法做了一次定位,可是还是不会获取到;当时检查了手机权限问题,以及系统自带的天气定位功能,也是获取不到的,到这里大家以为是手机的问题了;不过后来申请了高德地图的定位权限,重写了定位方法,就能获取到定位数据了!

        记录下此解决方法;





Android获取定位通常通过Google Play Services中的Location API来实现,特别是FusedLocationProviderClient类。以下是一个基本步骤: 1. **添加权限**:在AndroidManifest.xml文件中添加`<uses-permission>`标签,如 `<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />` 和 `<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />`。 2. **初始化GoogleApiClient**:创建一个`FusedLocationProviderClient`实例,并在合适的生命周期回调(如Activity或Fragment的onCreate())中初始化。 ```java FusedLocationProviderClient fusedLocationClient = LocationServices.getFusedLocationProviderClient(this); fusedLocationClient.lastLocation; ``` 3. **请求位置更新**:使用`requestLocationUpdates()`方法,提供一个`LocationCallback`来接收位置变化的通知。 ```java fusedLocationClient.requestLocationUpdates(LocationRequest.create(), new LocationCallback() { @Override public void onLocationResult(LocationResult locationResult) { // 处理新位置数据 if (locationResult != null && locationResult.getLastLocation() != null) { Location location = locationResult.getLastLocation(); // 使用location.getLatitude() 和 location.getLongitude() 等方法获取经纬度 } } }, Looper.myLooper()); ``` 4. **处理错误和异常**:确保在可能出现错误的地方添加错误处理代码。 注意,为了提供更好的用户体验,你应该在用户授权后才开始请求定位,并且可以设置定期的位置更新间隔,避免频繁耗电。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值