2012-03-25 2 views
0

Ich versuche, eine Annäherungsalarm-App zu entwickeln, die mit einem Alarm benachrichtigt, wenn der Benutzer eine Schulzone betritt und beim Eintreten über eine bestimmte Geschwindigkeit fährt.Wie kann ich Daten ändern, die aufgrund eines Diensts in einer Aktivität in Android verwendet werden?

Ich muss einen Hintergrunddienst ausführen, der Benutzerstandort und Geschwindigkeit berechnet.

Ich brauche eine Aktivität, um die sich ständig ändernden Breiten-/Längen- und Geschwindigkeitswerte des Benutzers zu erhalten und diese Werte zu verwenden, um den Abstand zwischen dem aktuellen Standort und dem Schulort zu berechnen (Koordinaten werden von einer Datenbank empfangen) und einen Alarm auszulösen der Abstand ist kleiner als der bereits eingestellte Nahbereich.

Antwort

1

Was ist dein Problem? Ich habe dies in einem meiner letzten Projekt getan. Sie müssen in Ihrem Service einen GPS-Listener implementieren. Ich empfehle einen Broadcast für die Kommunikation zwischen Ihrem Dienst und Ihrer Aktivität. Wenn Sie einen Alarm wünschen, müssen Sie, wenn Ihre Aktivität in Sicht ist, Ihren Alarm in der Aktivität implementieren. Andernfalls müssen Sie einen pendingIntent in Ihrem Service erstellen und eine Benachrichtigung auslösen, wenn es Zeit für.

möglich onCreate in Ihren Diensten:

@Override 
public void onCreate() { 

    myNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    myServiceBroadcastReceiver = new MyServiceBroadcastReceiver(); 
    MyApplication.getAppContext().registerReceiver(myServiceBroadcastReceiver, new IntentFilter(MyApplication.APP_UPDATE_DEMAND)); 

    myNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 




    myLocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

    myLocListener = new MyLocListener(); 


    myLocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MyApplication.GPS_UPDATE_PERIOD, 0, myLocListener); 
    myLocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MyApplication.NETWORK_UPDATE_PERIOD, 0, myLocListener); // comment this line out if you want only gps! 
} 

Ihr Beispiel Location Klasse

private class MyLocListener implements LocationListener { 

    public void onLocationChanged(Location location) { 

     String lat = Double.toString(location.getLatitude()); 
     String lng = Double.toString(location.getLongitude(); 
//evaluate lat and lng here, fire a notification or send a broadcast if the activity is in view. 

     } 
    } 

    public void onProviderDisabled(String provider) { 
    // Do something 

    } 

    public void onProviderEnabled(String provider) { 
    // Do something 

    } 

    public void onStatusChanged(String provider, int status, 
      Bundle extras) { 
    // Do something 
    } 
} 

Wenn Sie lat und lng im Dienst auswerten möchten (Aktivität ist nicht in Sicht) Sie können dies tun, in onLocationChanged() Wenn Sie Ihre GPS-Daten in Ihrer Aktivität auswerten möchten (in Sicht), können Sie eine Übertragung an Ihre Aktivität senden. Es gibt andere Möglichkeiten, um Daten für die Aktivität zu geben, aber für mich war die Lösung mit einer Übertragung die beste Option (musste auch andere Informationen senden).

Verwandte Themen