Dies ist der Code für die Aktualisierung der Breite und Länge des Geräts in einem Hintergrunddienst und wird immer in einem Hintergrund arbeiten. Der Dienst wird niemals gestoppt, wenn jemand (manuell oder System) ihn automatisch startet.
public class LocationService extends Service implements LocationListener {
LocationManager m_locationManager;
@Override
public void onCreate() {
this.m_locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Toast.makeText(getApplicationContext(), "Location Service starts", Toast.LENGTH_SHORT).show();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//TODO do something useful
Toast.makeText(getApplicationContext(), "Service starts", Toast.LENGTH_SHORT).show();
// Here I offer two options: either you are using satellites or the Wi-Fi services to get user's location
// this.m_locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 3000, 0, this); // User's location is retrieve every 3 seconds
this.m_locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
this.m_locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, this);
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
//TODO for communication return IBinder implementation
return null;
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(getApplicationContext(), "Service Task destroyed", Toast.LENGTH_LONG).show();
Intent myIntent = new Intent(getApplicationContext(), LocationService.class);
PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 0, myIntent, 0);
AlarmManager alarmManager1 = (AlarmManager) getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 10);
alarmManager1.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
Toast.makeText(getApplicationContext(), "Start Alarm", Toast.LENGTH_SHORT).show();
}
@Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
Intent myIntent = new Intent(getApplicationContext(), LocationService.class);
PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 0, myIntent, 0);
AlarmManager alarmManager1 = (AlarmManager) getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 10);
alarmManager1.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
Toast.makeText(getApplicationContext(), "Start Alarm", Toast.LENGTH_SHORT).show();
}
@Override
public void onLocationChanged(Location loc) {
if (loc == null) // Filtering out null values
return ;
Double lat = loc.getLatitude();
Double lon = loc.getLongitude();
// Toast.makeText(getApplicationContext(),"Latitude = "+lat+ "\nLongitude = "+lon, Toast.LENGTH_SHORT).show();
// new UpdateLatitudeLongitude(LocationService.this, lat, lon,).execute();
//Calling AsyncTask for upload latitude and longitude
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
}
Danke für den Code, können Sie erklären, wie Sie einschließlich locMan.removeUpdates (GPSListener); Ich meine, wenn du den Hörer entfernst, wie wird er dann die Standortänderung erfassen? – lionheart
Das war versehentlich..ich habe es bearbeitet – Hackose