addProximityAlert funktioniert nicht wie erwartet

ios sdk verfügt über hervorragende Funktionen zur Regionsüberwachung. Ich brauche so etwas in Android und ich denke, wir haben zwei Alternativen. Geofencing und LocationManager.

Geofencing hat wirklich ordentliche Beispiele und Bugs, deshalb habe ich LocationManager vorgezogen. Mit einer Ausnahme funktioniert in LocationManager alles einwandfrei. Wenn Sie Ihren aktuellen Standort als ProximityAlert hinzufügen, wird sofort "ENTERING" ausgelöst, aber es ist mein aktueller Standort. Dies bedeutet nicht, dass ich in diese Region eingetreten bin. Aus diesem Grund wird jedes Mal, wenn ich meine Anwendung starte, "ENTERING" ausgelöst, wenn ich mich in einer Region befinde. (Auch wenn ich mich nicht bewege)

Wie kann ich dieses Problem und Brandereignis nur lösen, wenn der Benutzer die Region wirklich betritt?

Hier ist, wie ich PeddingIntents für meine Standorte hinzufüge.

    LocationManager locationManager =  (LocationManager)mContext.getSystemService(Context.LOCATION_SERVICE);

    for(Place p : places)
    {
        Log.e("location", p.location);

        Bundle extras = new Bundle();
        extras.putString("name", p.displayName);
        extras.putString("id", p.id);
        Intent intent = new Intent(CommandTypes.PROX_ALERT_INTENT);
        intent.putExtra(CommandTypes.PROX_ALERT_INTENT, extras);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext,Integer.parseInt(p.id), intent,PendingIntent.FLAG_CANCEL_CURRENT);
        float radius = 50f;
        locationManager.addProximityAlert(p.lat,
                p.lon, radius, 1000000, pendingIntent);

    }       

Empfänger

public class ProximityReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

    final String key = LocationManager.KEY_PROXIMITY_ENTERING;
    final Boolean entering = intent.getBooleanExtra(key, false);

    Bundle b = intent.getBundleExtra(CommandTypes.PROX_ALERT_INTENT);
    String id = b.getString("id");
    Log.e("here" + id, "here");

    if (entering) {
        Log.e(TAG,"entering");
    } else {
        Log.e(TAG,"leaving");
    }
} 

Manifest

   <receiver android:name=".ProximityReceiver">
        <intent-filter>
            <action android:name="ACTION_PROXIMITY_ALERT" />
        </intent-filter>            
    </receiver>

Vielen Dank

PS: iOS hat dieses Problem nicht und die Dokumentation erklärt es so

Die Überwachung einer geografischen Region beginnt unmittelbar nach der Registrierung für autorisierte Apps. Erwarten Sie jedoch nicht, dass Sie sofort eine Veranstaltung erhalten. Nur Grenzüberschreitungen erzeugen ein Ereignis. Befindet sich der Standort des Benutzers zum Zeitpunkt der Registrierung bereits in der Region, generiert der Standortmanager nicht automatisch ein Ereignis. Stattdessen muss Ihre App warten, bis der Benutzer die Regionsgrenze überschreitet, bevor ein Ereignis generiert und an den Delegaten gesendet wird. Sie können jedoch die requestStateForRegion: -Methode der CLLocationManager-Klasse verwenden, um zu überprüfen, ob sich der Benutzer bereits innerhalb der Grenze einer Region befindet.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage