java - 获取前台Android中已知的最后一个位置
问题描述
在几次(不成功)尝试使我的应用程序符合对该位置的后台访问之后,我决定重新构建我的代码,以便ACCESS_BACKGROUND_LOCATION
从manifest
.
我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;
}
}
有一个更好的方法吗?
解决方案
这是获取最后一个已知位置的好文档。
以及如何在后台访问位置。
三星商业设备有一些名为 KNOX 的功能,它的行为似乎与您在权限问题上看到的一样。一旦你知道它的确切来源,我就不会再关心它了。这并没有广泛传播,并且在弹出消息的情况下,它会这样做是有原因的:用户希望(或被他的管理员强制)通知某些操作,例如想要获取当前位置的应用程序。
如果您没有其他设备,您可以在模拟器中检查您的应用程序的正常行为。
因此,共识是,您不能在没有请求权限的情况下执行此操作。
推荐阅读
- flutter - 如何在 Flutter 中为模块创建单独的路由?
- html - 出于某种原因,我在 div 中的图像没有显示出来,它只是空的。我可以在浏览器的 F12 中看到它的假定图像的轮廓
- python - 如何在我的 python 程序中重写文件中的某些内容
- javascript - 使用钩子从数组中设置多个值
- javascript - 如何创建一个与 include() 方法作用相同的函数
- python - 为什么 git fetch 并不总是更新本地分支以显示它何时与远程不同步
- swift - 在 SwiftUI 中点击时,从函数返回的按钮不起作用
- php - PHP 8,函数别名兼容性`getdir()`
- json - 用golang解析Json文件,遇到问题“cannot unmarshal object into Go value of type”
- python - 3 x 1D 坐标数组到 1 个 3D 数组