首页 > 解决方案 > 获取前台Android中已知的最后一个位置

问题描述

在几次(不成功)尝试使我的应用程序符合对该位置的后台访问之后,我决定重新构建我的代码,以便ACCESS_BACKGROUND_LOCATIONmanifest.

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;
            }
        }

有一个更好的方法吗?

标签: javaandroidlocation

解决方案


这是获取最后一个已知位置的好文档。

以及如何在后台访问位置

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

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

因此,共识是,您不能在没有请求权限的情况下执行此操作。


推荐阅读