GeoFencing:BroadcastReceiver 无法触发

GeoFencing: BroadcastReceiver fails to trigger

我已经尝试 运行 这个来自 android 开发者的应用程序:https://developer.android.com/codelabs/advanced-android-kotlin-training-geofencing?authuser=2#0

正在添加地理围栏,但未触发任何内容。我试过查看此页面:https://simpleinout.helpscoutdocs.com/article/232-my-geofences-arent-working-android 但是我的phone好像没问题...

当我收到“添加了地理围栏”的日志时,如何不触发广播??。我的模拟器、Intent 或 broadcastReceiver 有问题吗??

广播接收器:

class GeofenceBroadcastReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action == ACTION_GEOFENCE_EVENT) {
            val geofencingEvent = GeofencingEvent.fromIntent(intent)

            if (geofencingEvent.h

意图:

private val geofencePendingIntent: PendingIntent by lazy {
        val intent = Intent(this, GeofenceBroadcastReceiver::class.java)
        intent.action = ACTION_GEOFENCE_EVENT
        PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
    }

添加地理围栏:

addOnCompleteListener {
                // Add the new geofence request with the new geofence
                geofencingClient.addGeofences(geofencingRequest, geofencePendingIntent)?.run {
                    addOnSuccessListener {
                        // Geofences added.

位置 ACCESS_BACKGROUND_LOCATION 和 ACCESS_FINE_LOCATION 也“始终允许”[=1​​5=]

终于想通了。代码没有任何内容。在模拟器上测试是行不通的(至少对我来说不行,不能通过单击设置和那样更改位置)

对我有用的是在真实设备上进行测试:

  • 转到开发人员设置并启用模拟位置
  • 从应用商店下载 Lockito。
  • 返回开发者设置(模拟位置)并将应用设置为“lockito”。
  • 在lockito中设置你想要的任何路线,然后点击播放。