PendingIntent 中的一个新 PendingIntent 字段是 FLAG_IMMUTABLE。
31中,必须指定MUTABLE或IMMUTABLE,否则不能创建PendingIntent,(当然我们不能有默认值,那是给loser的)参考这里
根据(热闹的)Google Javadoc for Pendingintent,您基本上应该始终使用 IMMUTABLE(empasis mine):
强烈建议在创建 PendingIntent 时使用 FLAG_IMMUTABLE。FLAG_MUTABLE 仅应在某些功能依赖于修改底层意图时使用,例如任何需要与内联回复或气泡一起使用的PendingIntent (编辑评论:什么?)。
对,所以我总是为这样的地理围栏创建 PendingIntents:
PendingIntent proximityIntent = PendingIntent.getBroadcast(context, requestCode, intent, PendingIntent.FLAG_NO_CREATE)
一直工作得很好。但是,按照上面的文档,我添加了 IMMUTABLE 标志,如下所示:
PendingIntent proximityIntent = PendingIntent.getBroadcast(context, requestCode, intent, PendingIntent.FLAG_NO_CREATE|PendingIntent.FLAG_IMMUTABLE)
现在,结果是当我仍然在接收器中进行地理围栏转换时,如果我打电话
List<Geofence> triggeringGeofences = geofencingEvent.getTriggeringGeofences();
它返回空!
所以,我有两个问题。
为什么 IMMUTABLE 标志导致我没有像过去那样获得触发地理围栏?
难道我做错了什么?有没有办法用地理围栏触发器设置 IMMUTABLE?
其实我有三个问题:
- 为什么 Google 的文档如此混乱、糟糕、矛盾和落后?(这是一个反问句)
非常感谢指针。