配置初始触发后Geofence未触发BroadcastReceiver问题排查求助
问题根因及修复方案
- 无效的地理围栏坐标
纬度的合法取值范围是-90°~90°,你代码中设置的纬度为-123.456属于完全无效的坐标,地理围栏实际被创建到了不存在的位置,自然不可能触发任何进出事件。请替换为你当前实际所在位置的经纬度测试。
- 无效的地理围栏坐标
- PendingIntent Flag适配问题
如果你App的目标SDK版本≥31(Android 12及以上),必须为PendingIntent显式指定可变性标识,否则触发广播时会收不到回调。修改getGeofencePendingIntent方法中的代码:
- PendingIntent Flag适配问题
// 原有代码 geofencePendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); // 修改为 geofencePendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
- 广播接收器中Toast未生效
你在接收器的错误分支中调用的Toast没有添加.show()方法,就算事件触发你也看不到错误提示,修改对应代码:
- 广播接收器中Toast未生效
// 原有代码 Toast.makeText(context.getApplicationContext(), "error in broadcast receiver", Toast.LENGTH_SHORT); // 修改为 Toast.makeText(context.getApplicationContext(), "error in broadcast receiver", Toast.LENGTH_SHORT).show();
- 定位模式校验
请确保设备开启了「高精度定位」模式(同时使用GPS、WiFi、移动网络定位),仅使用省电模式或仅设备定位模式会大幅降低地理围栏的检测概率,甚至完全不触发。
- 定位模式校验
- 补充说明:你对初始触发的理解是正确的,设置了
INITIAL_TRIGGER_ENTER | INITIAL_TRIGGER_EXIT之后,围栏创建成功时如果设备在围栏内会立刻触发ENTER事件,在围栏外会立刻触发EXIT事件。
内容的提问来源于stack exchange,提问作者Carlos López Marí
相关产品推荐
相关产品推荐

