如何解决Android Geofencing退出触发器
我一直在尝试实现地理围栏以在我的应用程序中启动某些服务,而输入触发器起作用时,我似乎无法使退出触发器也能正常工作。
我正在从firebase读取纬度长半径,以便于访问和调试。这是我的代码:
private val geofencePendingIntent: PendingIntent by lazy {
val intent = Intent(this,GeofencebroadcastReceiver::class.java)
intent.action = GEOFENCE
PendingIntent.getbroadcast(this,intent,PendingIntent.FLAG_UPDATE_CURRENT)
}
private fun addGeoFence() {
val geoFenceRequest = getGeoFencingRequest()
checkOrAskLocationPermission {
geofencingClient.addGeofences(geoFenceRequest,geofencePendingIntent)
.addOnSuccessListener {
Log.d(TAG,"GeoFence Added")
}.addOnFailureListener {
Log.d(TAG,"GeoFence Failed to Add")
}
}
}
private fun getGeoFencingRequest(): GeofencingRequest {
val geoFence = Geofence.Builder()
.setRequestId(GEO_FENCING_REQUEST_CODE)
.setExpirationDuration(Geofence.NEVER_EXPIRE)
.setCircularRegion(
lat,lng,radius
)
.setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER or Geofence.GEOFENCE_TRANSITION_EXIT)
.build()
val geoFenceList: MutableList<Geofence> = mutablelistof(geoFence)
return GeofencingRequest.Builder().apply {
setinitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER or GeofencingRequest.INITIAL_TRIGGER_EXIT)
addGeofences(geoFenceList)
}.build()
}
这是接收者,在调用触发器之后我必须做些事情
class GeofencebroadcastReceiver : broadcastReceiver() {
override fun onReceive(context: Context?,intent: Intent?) {
val geofencingEvent = GeofencingEvent.fromIntent(intent)
val geofenceTransition = geofencingEvent.geofenceTransition
context?.let {
if (intent?.action == Constants.GEOFENCE)
if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER) {
//Start
} else if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_EXIT) {
//Stop
}
}
}
}
为什么退出转换永远不会触发?
对于其他情况,我将lat放在火场上,当我第一次将半径设置为100时,我会看到输入触发器,但是即使将半径减小到1,它也永远不会触发出口,还是我必须实际上与设备本身相距很远?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。