addProximityAlert nie działa zgodnie z oczekiwaniami

ios sdk ma świetne funkcje monitorowania regionu. Potrzebuję czegoś takiego w Androidzie i myślę, że mamy dwie możliwości. Geofencing i LocationManager.

Geofencing ma naprawdę uporządkowane przykłady i błędy, więc preferowałem LocationManager. Everyting działa poprawnie w LocationManager z wyjątkiem jednego. Jeśli dodasz swoją aktualną lokalizację jako ProximityAlert, natychmiast wywoła ona „ENTERING”, ale jest to moja aktualna lokalizacja, nie oznacza to, że wszedłem do tego regionu. Z tego powodu uruchamia „WPROWADZANIE” za każdym razem, gdy uruchamiam aplikację, jeśli jestem w regionie (nawet jeśli się nie ruszam)

Jak mogę rozwiązać ten problem i pożar, tylko jeśli użytkownik naprawdę WPROWADZA region?

Oto, w jaki sposób dodaję PeddingIntents dla moich lokalizacji.

    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);

    }       

Odbiorca

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");
    }
} 

Oczywisty

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

Dziękuję Ci bardzo

PS: iOS nie ma tego problemu, a ich dokumentacja to wyjaśnia

Monitorowanie regionu geograficznego rozpoczyna się natychmiast po zarejestrowaniu autoryzowanych aplikacji. Nie oczekuj jednak, że od razu otrzymasz wydarzenie. Tylko przejścia graniczne generują zdarzenie. Jeśli więc w czasie rejestracji lokalizacja użytkownika znajduje się już w regionie, menedżer lokalizacji nie generuje automatycznie zdarzenia. Zamiast tego aplikacja musi czekać, aż użytkownik przekroczy granicę regionu, zanim wydarzenie zostanie wygenerowane i wysłane do delegata. Można jednak użyć metody requestStateForRegion: klasy CLLocationManager, aby sprawdzić, czy użytkownik znajduje się już w granicach regionu.

questionAnswers(1)

yourAnswerToTheQuestion