有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在Android中获得最后一个已知位置

在几次(失败的)尝试使我的应用程序符合对该位置的后台访问之后,我决定重新构造代码,以便从manifest中删除ACCESS_BACKGROUND_LOCATION权限

我的application需要在特定时间获得设备的位置(特别是我需要坐标),我感兴趣的是知道: 如果不使用上述许可,我如何在前台获得设备的位置

是否可以在不使用服务等的情况下通过一次性通话来实现

我考虑过使用这个代码,你觉得它足够吗

 LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider);
 mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
 mFusedLocationClient.getLastLocation()
    .addOnSuccessListener(this, new OnSuccessListener<Location>() {
        @Override
        public void onSuccess(Location location) {
            if (location != null) {
                // Logic to handle location object
            }
        }
    });

或者像这样:

        LocationManager mLocationManager = (LocationManager) context.getSystemService(LOCATION_SERVICE);
        List<String> providers = mLocationManager.getProviders(true);
        Location bestLocation = null;
        for (String provider : providers) {
            Location location = mLocationManager.getLastKnownLocation(provider);
            if (location == null) {
                continue;
            }
            if (bestLocation == null || location.getAccuracy() < bestLocation.getAccuracy()) {
                bestLocation = location;
            }
        }

有更好的方法吗


共 (2) 个答案

  1. # 1 楼答案

    这是一个很好的Get the last known location文档

    以及如何Access location in the background

    三星商用设备有一个名为KNOX的功能,它的行为似乎与您看到的权限问题类似。一旦你知道它的确切来源,我就不在乎了。这种情况并没有广泛传播,在弹出消息的情况下,它的作用是有原因的:用户希望(或被其管理员强制)被告知某些操作,例如希望获取当前位置的应用程序

    如果没有其他设备,可以在模拟器中检查应用程序的正常行为

    所以大家的共识是,你不能在没有请求权限的情况下进行操作

  2. # 2 楼答案

    要获取最后知道的位置,您需要在清单文件中声明以下权限

    "android.permission.ACCESS_FINE_LOCATION"

    然后,您可以像以前一样使用Fused Location Provider

    现在,如果您想要定期更新,您可能需要使用以下回调来注册这些更新

    requestLocationUpdates

    与请求对象和回调一起传递以接收更新

    带有精确代码的有用链接:Request Updates