PendingIntent中新增了一个FLAG_IMMUTABLE字段。
在31版本中,你必须指定MUTABLE或IMMUTABLE,否则无法创建PendingIntent。(当然我们不能有默认值,那是为失败者准备的)参考这里。
根据(滑稽)Google Javadoc文档的建议,你应该基本上总是使用IMMUTABLE(重点是我的):
强烈建议创建PendingIntent时使用FLAG_IMMUTABLE。只有在某些功能依赖于修改基础意图的情况下,才应使用FLAG_MUTABLE,例如任何需要与内联回复或气泡一起使用的PendingIntent(编辑的注释:什么?)。
所以,我一直像这样为Geofence创建PendingIntent:
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();
它返回 null!
所以,我有两个问题。
为什么 IMMUTABLE 标志导致我不像过去那样得到触发的地理围栏?
我做错了什么吗?是否有一种方法可以使用 Geofence 触发器设置 IMMUTABLE?
实际上,我有三个问题:
- 为什么谷歌的文档如此令人困惑、糟糕、自相矛盾且滞后?(这是一个修辞问题)
非常感谢您的指点。