Java 将最大GPS限制在2个距离之间
我读过很多类似的文章,但我没有得到我需要的答案: 因此,我有一个连接到后端服务器的应用程序,比如现场出勤,用户(本例中的技术人员)前往某些地方,并使用照片功能在那里制作文档,其中有自动水印功能(显示坐标和到现场的距离) 我设置了一个用户必须访问和拍照的坐标,但我想限制到站点的距离,因此如果用户拍摄的照片距离站点超过100米,应用程序将自动关闭 目前我正在使用Java和Kotlin进行开发 我怎样才能做到这一点 这是获取位置的代码:Java 将最大GPS限制在2个距离之间,java,android,kotlin,Java,Android,Kotlin,我读过很多类似的文章,但我没有得到我需要的答案: 因此,我有一个连接到后端服务器的应用程序,比如现场出勤,用户(本例中的技术人员)前往某些地方,并使用照片功能在那里制作文档,其中有自动水印功能(显示坐标和到现场的距离) 我设置了一个用户必须访问和拍照的坐标,但我想限制到站点的距离,因此如果用户拍摄的照片距离站点超过100米,应用程序将自动关闭 目前我正在使用Java和Kotlin进行开发 我怎样才能做到这一点 这是获取位置的代码: class LocationService(context: C
class LocationService(context: Context): LiveData<Result<Throwable, Location?>>() {
private var fusedLocationClient = LocationServices.getFusedLocationProviderClient(context)
override fun onInactive() { // is called when the lifecycle owner(LocationActivity) is either paused, stopped or destroyed
super.onInactive()
fusedLocationClient.removeLocationUpdates(locationCallback)
}
override fun onActive() { // is called when the lifecycle owner(LocationActivity) is either started or resumed
super.onActive()
fusedLocationClient.lastLocation
.addOnSuccessListener { setLocationData(it) }
.addOnFailureListener {t -> setErrorData(t) }
startLocationUpdates()
}
private fun setLocationData(location: Location?) { // location is nullable as if GPS is turned off even if the last
// location was previously retrieve because disabling location clears the cache
//value = LocationEvent.OnLocationResult(Result.build { location })
value = Result.build { location }
}
private fun setErrorData(t: Throwable) {
//value = LocationEvent.OnLocationResult(Result.build { throw t })
value = Result.build { throw t }
}
private fun startLocationUpdates() {
Timber.d { "start location updates" }
fusedLocationClient.requestLocationUpdates(
locationRequest,
locationCallback,
null // looper
)
}
class-LocationService(context:context):LiveData(){
私有变量fusedLocationClient=LocationServices.getFusedLocationProviderClient(上下文)
当生命周期所有者(LocationActivity)暂停、停止或销毁时,将调用override fun OnInActivity(){//
super.onInactive()
fusedLocationClient.RemovelocationUpdate(locationCallback)
}
在启动或恢复生命周期所有者(LocationActivity)时调用override fun onActive(){//
super.onActive()
fusedLocationClient.lastLocation
.addOnSuccessListener{setLocationData(it)}
.addOnFailureListener{t->setErrorData(t)}
startLocationUpdates()
}
private fun setLocationData(位置:位置?{//location可为空,就好像GPS已关闭一样,即使最后一个
//以前检索过位置,因为禁用位置会清除缓存
//value=LocationEvent.OnLocationResult(Result.build{location})
value=Result.build{location}
}
私人娱乐设置错误数据(t:可丢弃){
//value=LocationEvent.OnLocationResult(Result.build{throw t})
value=Result.build{throw t}
}
私人娱乐场所更新(){
Timber.d{“开始位置更新”}
fusedLocationClient.RequestLocationUpdate(
位置请求,
位置回调,
空//活套
)
}
您可以使用Android地理围栏
地理围栏将对用户当前位置的感知与对用户与可能感兴趣的位置的接近度的感知相结合。要标记感兴趣的位置,请指定其纬度和经度。要调整位置的接近度,请添加半径。纬度、经度和半径定义地理围栏,并创建一个圆形区域感兴趣位置周围的区域或围栏
您可以有多个活动的地理围栏,每个应用程序、每个设备用户的限制为100。对于每个地理围栏,您可以要求位置服务向您发送入口和出口事件,或者您可以在触发事件之前在地理围栏区域内指定等待或停留的持续时间。您可以通过指定过期时间来限制任何地理围栏的持续时间持续时间(毫秒)。地理围栏过期后,定位服务会自动将其删除。能否向我们展示您目前掌握的代码?