代码之家  ›  专栏  ›  技术社区  ›  matip

地理围栏,正在触发错误的挂起意图

  •  1
  • matip  · 技术社区  · 6 年前

    在我的应用程序中,我有多个地理围栏,我希望它们具有唯一的待定意图,并具有不同的额外数据。但现在发生的是,对于我所有的地理围栏,正在触发的未决意图都是为最后一个地理围栏添加的,而不是分配给用户刚刚创建的特定地理围栏的。

    例如,当我有2个地理围栏时,对于第一个,我会在挂起的意图中添加额外的字符串“AAA”,然后添加第二个带有额外“BBB”的地理围栏 然后输入第一个地理围栏,我将收到带有“BBB”的通知,而不是正确的“AAA” 我做错了什么?下面是我添加一个新地理围栏的代码:

    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);
        }
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   payloc91    6 年前

    我看到您正在使用泛型函数来构建 PendingIntents

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

    指定ID 0 不管怎样 PendingIntent 您正在构建。

    因为您正在使用标志 FLAG_UPDATE_CURRENT ,您只是在重写以前生成的 处理意图 ( AAA ).

    临时演员是两者之间唯一的变化 Intents 但他们没有被考虑在内:看看如何 Android compares PendingIntents .


    答复 :使用其他 requestCode 对于每个 处理意图 .