触发地理围栏,错误的意图



在我的应用程序中,我有多个地理,我希望它们具有独特的待处理意图,并具有不同的额外数据。但是,发生的事情是,对于我所有正在触发的待处理意图的地理诉讼而言,是为最后一个地理添加的一种,而不是分配给用户刚刚递送的特定的一种。

因此,例如,当我有2个地理五件时,对于第一个地理五项 然后输入第一个Geofence,我会通过" BBB"而不是正确的" AAA"通知我究竟做错了什么?这是我的代码,我在其中添加单个新的Geofence:

public void addGeofencing(final MyObject myObject){
    Geofence geofence = (new Geofence.Builder()
            .setRequestId(myObject.getId())
            .setCircularRegion(
                myObject.getLat(),
                myObject.getLon(),
                RADIUS_IN_METERS
            )
            .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER |
                            Geofence.GEOFENCE_TRANSITION_EXIT)
            .setExpirationDuration(Geofence.NEVER_EXPIRE)
            .build());
            client.addGeofences(getGeofencingRequest(geofence),getGeofencePendingIntent(myObject.getExtraString))
                    .addOnSuccessListener(new OnSuccessListener<Void>() {
                        @Override
                        public void onSuccess(Void aVoid) {
                            System.out.println("GEOFENCE WORKED");
                        }
                    }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    System.out.println("GEOFENCE FAILED");
                }
            });
    }
    private GeofencingRequest getGeofencingRequest(Geofence geofence) {
        GeofencingRequest.Builder builder = new GeofencingRequest.Builder();
        builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER);
        builder.addGeofence(geofence);
        return builder.build();
    }
    private PendingIntent getGeofencePendingIntent(String extraString) {
        Intent intent = new Intent(context, GeofenceTransitionsIntentService.class);
        intent.putExtra("extra",extraString);
        return PendingIntent.getService(context, 0, intent, FLAG_UPDATE_CURRENT);
    }

我看到您正在使用通用函数来构建您的PendingIntents

return PendingIntent.getService(context, 0, intent, FLAG_UPDATE_CURRENT);

将ID 0指定为您要构建的任何PendingIntent

由于您使用的是标志FLAG_UPDATE_CURRENT,因此您只是覆盖先前构建的PendingIntent(AAA(。

extras是两个 Intents之间唯一变化的东西,但没有考虑它们:查看Android如何比较悬浮物。


答案:为每个PendingIntent使用其他requestCode

相关内容

  • 没有找到相关文章

最新更新