2014-05-16 11 views
5

Ich möchte den Benutzer warnen, wenn er in der Nähe eines bestimmten Ortes ist. Dazu habe ich einen ProxmityAlert und einen entsprechenden Service in meine App aufgenommen. Aber egal, welche Koordinaten ich gebe, es zeigt mir immer "Danke, dass du meine Gegend besucht hast !!" "Betrete ich das falsch?Standort Manager ProxmityAlert sagt immer Eingabe

Dies ist, wie ich es tue:

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

}

Und dies ist der Empfänger:

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

    } 
} 
} 

Im Manifest, ich habe hinzugefügt:

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

Antwort

5

Aus meiner Sicht sollten Sie mehrere Geofencing verwenden, als die einfachste Möglichkeit zu erreichen, was Sie wollen. Sie können so etwas wie ein Zielgebiet tun. Das Zielauge ist also das Zentrum, an dem der Benutzer wegfahren oder ihn erreichen möchte.

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

Wie in diesem Zielbild, zum Beispiel werden Sie von außen nach innen haben zu zählen, insgesamt 6 geofences. Je näher der Zielpunkt, desto höher die Geofence-ID 6, desto weiter entfernt vom Ziel befindet sich die Geofence-ID 1. Grundsätzlich müssen Sie mehrere Geofencing koordinieren, um das zu erreichen, was Sie wünschen. Anstatt also Geofences mit overlapping Grenzbereichen zu trennen, haben Sie zentrische Geofences.

Jedes Mal, wenn Ihr Benutzer einen höheren Geofence-Wert erhält, gibt ein Intent ein Signal oder einen Ton wie: "Sie kommen näher". Umgekehrt gilt das auch für den Fall, dass sich der Benutzer weit vom Zielbereich entfernt: "Ihre Geofence-ID wurde von 3 für 2 geändert, Sie bewegen sich in die entgegengesetzte Richtung von Ihrem Ziel".

Ihr aktueller Code macht diese Art von Unterscheidung in verschiedene Richtungen im Zusammenhang mit Geofencing nicht, weder zeigt die Behandlung von mehreren Geofencing. Deshalb verhält sich der Code nicht so, wie Sie es möchten.