Salve a tutti, sto creando un servizio che automaticamente mi salvi la posizione gps ogni minuto. Faccio partire quindi il servizio da un activity e utilizzo la classe TimerTask per temporizzare l'operazione. All'interno del metodo run() di TimerTask inserisco i metodi per salvare la posizione ma in runtime mi da problemi (l'applicazione crasha e il logcat mi dice che il problema è nella implementazione del metodo run()). Se non utilizzo la temporizzazione, quindi salvo solo una volta la posizione gps tutto funziona.
Vi posto anche il codice se qualcuno può dirmi dove sbaglio.. Grazie!!
Vi allego anche il logcodice:1package it.helloworld.tour;
2
3import java.io.FileNotFoundException;
4import java.io.IOException;
5import java.io.ObjectOutputStream;
6import android.app.Service;
7import android.content.Context;
8import android.content.Intent;
9import android.location.Location;
10import android.location.LocationListener;
11import android.location.LocationManager;
12import android.os.Bundle;
13import android.os.IBinder;
14import java.util.ArrayList;
15import java.util.Timer;
16import java.util.TimerTask;
17
18public class Servizio extends Service {
19
20private ArrayList<Location> poi = new ArrayList<Location>();
21private Timer timer;
22private String providerId = LocationManager.GPS_PROVIDER;
23private Location location;
24private LocationManager locationManager;
25private LocationListener listener = new LocationListener() {
26public void onStatusChanged(String provider, int status, Bundle extras) {
27
28}
29public void onProviderEnabled(String provider) {
30
31}
32public void onProviderDisabled(String provider) {
33
34}
35public void onLocationChanged(Location location) {
36
37}
38};
39
40public IBinder onBind(Intent intent) {
41return null;
42}
43
44public void onCreate(){
45super.onCreate();
46timer = new Timer();
47timer.schedule(new Esegui(), 0, 60000);
48}
49
50public void onDestroy(){
51timer.cancel();
52timer = null;
53try {
54ObjectOutputStream oos = new ObjectOutputStream(openFileOutput("prova",Context.MODE_PRIVATE));
55oos.writeObject(poi);
56oos.close();
57
58} catch (FileNotFoundException e) {} catch (IOException e) {}
59}
60
61private class Esegui extends TimerTask{
62public void run(){
63locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
64locationManager.requestLocationUpdates(providerId, 5, 15, listener);
65location = locationManager.getLastKnownLocation(providerId);
66poi.add(location);
67}
68}
69
70}
codice:08-26 18:11:53.075: W/dalvikvm(30915): threadid=11: thread exiting with uncaught exception (group=0x40c371f8) 08-26 18:11:53.080: E/AndroidRuntime(30915): FATAL EXCEPTION: Timer-0 08-26 18:11:53.080: E/AndroidRuntime(30915): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 08-26 18:11:53.080: E/AndroidRuntime(30915): at android.os.Handler.<init>(Handler.java:121) 08-26 18:11:53.080: E/AndroidRuntime(30915): at android.location.LocationManager$ListenerTransport$1.<init>(LocationManager.java:173) 08-26 18:11:53.080: E/AndroidRuntime(30915): at android.location.LocationManager$ListenerTransport.<init>(LocationManager.java:173) 08-26 18:11:53.080: E/AndroidRuntime(30915): at android.location.LocationManager._requestLocationUpdates(LocationManager.java:579) 08-26 18:11:53.080: E/AndroidRuntime(30915): at android.location.LocationManager.requestLocationUpdates(LocationManager.java:446) 08-26 18:11:53.080: E/AndroidRuntime(30915): at it.helloworld.tour.Servizio$Esegui.run(Servizio.java:64) 08-26 18:11:53.080: E/AndroidRuntime(30915): at java.util.Timer$TimerImpl.run(Timer.java:284) 08-26 18:12:21.040: I/Process(30915): Sending signal. PID: 30915 SIG: 9