2014-05-16 29 views
5

Chcę ostrzec użytkownika, gdy jest on blisko określonej lokalizacji. Do tego mam włączone ProxmityAlert i odpowiednią usługę w mojej aplikacji. Ale bez względu na to, jakie współrzędne przekazuję, zawsze pokazuje mi "Dziękuję za odwiedzenie mojego Obszaru !!". Czy robię to w niewłaściwy sposób?Menedżer lokalizacji ProxmityAlert zawsze mówi wpisując

To jak ja to robię:

public class ProxTest extends Activity { 
LocationManager lm; 
double lat = 30.085514, long1 = 77.082603; 
float radius = 50; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    lm = (LocationManager) getSystemService(LOCATION_SERVICE); 
    Intent i = new Intent(); 
    i.setAction("com.example.test.proximityalert"); 

    PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), 
      -1, i, 0); 
    lm.addProximityAlert(lat, long1, radius, -1, pi); 
    sendBroadcast(i); 
    System.out.println("Prox alert added "); 
} 

}

I to jest odbiornik:

public class ProximityReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context arg0, Intent arg1) { 
    // TODO Auto-generated method stub 
    String k = LocationManager.KEY_PROXIMITY_ENTERING; 

    boolean state = arg1.getBooleanExtra(k, false); 

    if (state) { 

     Toast.makeText(arg0, "Welcome to my Area", Toast.LENGTH_LONG) 
       .show(); 
    } else { 

     Toast.makeText(arg0, "Thank you for visiting my Area!!"+k, 
       Toast.LENGTH_LONG).show(); 

    } 
} 
} 

w manifeście, dodałem:

<receiver android:name="ProximityReceiver"> 
     <intent-filter> 
     <action android:name="com.example.test.proximityalert"> 
     </action> 
     </intent-filter> 
    </receiver> 

Odpowiedz

5

Moim zdaniem powinieneś użyć wielu geofencing, jako najprostszego sposobu, aby osiągnąć to, co chcesz. Możesz zrobić coś takiego, jak obszar docelowy. W ten sposób oko docelowe jest centrum, w którym użytkownik chce odejść lub osiągnąć to.

http://www.cision.com/us/wp-content/uploads/2008/10/j0439610.png

jak w tym obrazie docelowym, na przykład będziesz musiał licząc od zewnątrz do wewnątrz, w sumie 6 granic geograficznych. Najbliższy celowi, im wyższy identyfikator geofence 6, najdalszym obszarem od celu będzie identyfikator geofence 1. Zasadniczo będziesz potrzebował skoordynować wiele geofencing, aby osiągnąć to, co chcesz. Zamiast więc mieć oddzielone obszary geofence z obszarami przygranicznymi overlapping, będziesz mieć centralne geofencje.

Za każdym razem, gdy użytkownik uzyskuje wyższą wartość geofence, intencja daje sygnał lub ton, na przykład: "zbliżasz się do numeru". Odwrotna sytuacja jest również prawdą, w przypadku, gdy użytkownik przemieszcza się daleko od docelowego obszaru: "Twój identyfikator geofence został zmieniony z 3 na 2, przemieszczasz się w przeciwnym kierunku niż miejsce docelowe".

Twój obecny kod nie wprowadza tego rodzaju rozróżnienia w różnych kierunkach związanych z geofencją, ani nie pokazuje obsługi wielu obszarów geofencing. Dlatego kod nie zachowuje się tak, jak byś tego chciał.