Android Вызов метода addGeofences для Wear Geofence возвращает Exception: 1000 - PullRequest
1 голос
/ 29 мая 2020

Я играю с 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.

...