Я играю с Wear OS на Fossil Falster 3 (он работает API 28 ). Также знайте, что я только начинаю с Kotlin
, поэтому приведенный ниже код не очень хорош, мягко говоря.
Я хочу создать Geofence с помощью широковещательного приемника.
В моем MainActivity.kt
У меня есть следующее:
override fun onStart() {
super.onStart()
requestForegroundAndBackgroundLocationPermissions()
val locations = arrayOf(Location("tgh", 58.798233, 11.123959))
val geofences = locations.map {
Geofence.Builder()
.setRequestId(it.name)
.setExpirationDuration(Geofence.NEVER_EXPIRE)
.setCircularRegion(it.latitude, it.longitude, 100F)
.setTransitionTypes(Geofence.GEOFENCE_TRANSITION_DWELL)
.setLoiteringDelay(10)
.build()
}
val geofencingRequest = GeofencingRequest.Builder().apply {
setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER)
addGeofences(geofences)
}.build()
val geofencePendingIntent: PendingIntent by lazy {
val intent = Intent(this, GeofenceReceiver::class.java)
PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
}
val geofencingClient = LocationServices.getGeofencingClient(this)
geofencingClient.addGeofences(geofencingRequest, geofencePendingIntent).run {
addOnFailureListener {
// display error
exception -> Log.d(TAG, "addOnFailureListener Exception: $exception")
}
addOnSuccessListener {
// move on
Log.d(TAG, "addOnSuccessListener, move on")
}
}
}
GeofenceReceiver
находится в том же файле:
class GeofenceReceiver: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
val geofencingEvent = GeofencingEvent.fromIntent(intent)
if (geofencingEvent.hasError()) {
Log.d(TAG, "geofencingEvent.hasError()")
} else {
geofencingEvent.triggeringGeofences.forEach {
val geofence = it.requestId
Log.d(TAG, "location at: " + geofence)
}
}
}
}
manifest
имеет следующий фрагмент:
<receiver android:name=".GeofenceReceiver"
android:enabled="true"
android:exported="true"/>
Вот и все. Когда я запускаю код, запускается addOnFailureListener
и печатается сообщение об ошибке, что приводит к исключению 1000. Исключение 1000 согласно документации Google означает GEOFENCE_NOT_AVAILABLE
. Я включил определение местоположения как на часах, так и на телефоне до максимального уровня на телефоне (Improve Location Accuracy is ON
). На часах я настроил использование местоположения как с часов, так и с телефона (высший уровень). Я все еще получаю код ошибки 1000.