T
Timm_D.
Neues Mitglied
- 0
Hallo Community,
ich bin nun schon seit einiger Zeit in der Android-Entwicklung tätig. Ich mache eine Ausbildung als Fachinformatiker - Anwendungsentwicklung und bin momentan an einer App, die später auf die Smartphones unserer Außendienstmitarbeiter soll. Die App startet einen Service auf Knopfdruck, welcher dann die GPS-Koordinaten ausliest und später an unseren WEbserver übermittelt. Aber das kommt später. Momentan werden die Daten noch im externen Speicher meines Smartphones auf einer Datenbank gespeichert.
Nun habe ich damit folgendes Problem.
Bei dieser Version kann der LocationListener nicht aufgerufen werden, da er mir beim Aufruf eine Exception ausgibt. Und zwar:
Cant create Handler inside Thread that has noch called Looper.prepare()
Das hab ich auch bereits gemacht, nur führt er mir dann die Methode getGPSData alle 45 Sekunden aus und lässt sich nicht mehr auf Buttonklick (
) beenden.
Es wäre schön wenn mir einer von euch einen Anhaltspunkt geben könnte wie ich das ganze so machen kann, das der Locationlistener alle 10 Minuten seine Updates bekommt und der Looper auch beendet werden kann. Ich habe mir auch schon die Beschreibung der Looper-Klasse angeschaut, nur finde ich dort keinen Hinweis auf diese ominösen 45 Sekunden.
Vielen Dank schonmal im Vorraus
ich bin nun schon seit einiger Zeit in der Android-Entwicklung tätig. Ich mache eine Ausbildung als Fachinformatiker - Anwendungsentwicklung und bin momentan an einer App, die später auf die Smartphones unserer Außendienstmitarbeiter soll. Die App startet einen Service auf Knopfdruck, welcher dann die GPS-Koordinaten ausliest und später an unseren WEbserver übermittelt. Aber das kommt später. Momentan werden die Daten noch im externen Speicher meines Smartphones auf einer Datenbank gespeichert.
Nun habe ich damit folgendes Problem.
Bei dieser Version kann der LocationListener nicht aufgerufen werden, da er mir beim Aufruf eine Exception ausgibt. Und zwar:
Cant create Handler inside Thread that has noch called Looper.prepare()
Code:
class Updater extends Thread
{
public final long schlafe = 10000;
public void run()
{
GPS gps = new GPS();
while(isRunning)
{
gps.run();
try
{
Thread.sleep(schlafe);
}
catch (InterruptedException e)
{
Log.e("Thread sleep", "Wurde aufgrund einer Exception unterbrochen");
isRunning = false;
}
}
}
}
Code:
class GPS extends Thread
{
public void run()
{
final Koordinaten base = new Koordinaten(GPS_Service.this);
//Neue Instanz der Class Koordinaten, in der SQLiteOpenHelper implementiert ist, um in die Datenbank zu schreiben.
//....................................................................................................................................................
//Einstellen von Datumsformat für die Übertragung
//....................................................................................................................................................
final SimpleDateFormat datum = new SimpleDateFormat("dd.MM.yyyy");
final SimpleDateFormat uhrzeit = new SimpleDateFormat("HH:mm:ss");
//....................................................................................................................................................
//LocationManager locman wird registriert
//....................................................................................................................................................
final LocationManager locman = (LocationManager)getSystemService(LOCATION_SERVICE);
//....................................................................................................................................................
//LocationListener wird registriert um veränderungen am Standort zu erfassen
//....................................................................................................................................................
LocationListener loclis = new LocationListener()
{
public void onLocationChanged(Location loc)
{
lat = (double)(loc.getLatitude());
lng = (double)(loc.getLongitude());
String string_datum = datum.format(new Date()).toString();
String string_zeit = uhrzeit.format(new Date()).toString();
try {
String add = "";
{
Geocoder geo = new Geocoder(getBaseContext(),Locale.getDefault());
List<Address> addresses = geo.getFromLocation(lat, lng, 1);
if(addresses.size() >0)
{
for (int i = 0;i<addresses.get(0).getMaxAddressLineIndex();i++)
{
add += addresses.get(0).getAddressLine(i) + "\n";
}
}
}
Log.v("getGPSData", "wurde ausgeführt");
base.addGeoKoords(new Aussendienstmitarbeiter(1, lat, lng, "Beliebiger Name", string_datum, string_zeit,add));
}
catch (IOException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
public void onProviderDisabled(String arg0)
{
}
public void onProviderEnabled(String arg0)
{
}
public void onStatusChanged(String arg0, int arg1, Bundle arg2)
{
}
};
try
{
Looper.prepare();
locman.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, loclis);
Looper.loop();
}
catch(Exception e)
{
Log.d("Fehler" , e.getMessage().toString());}
}
}
Das hab ich auch bereits gemacht, nur führt er mir dann die Methode getGPSData alle 45 Sekunden aus und lässt sich nicht mehr auf Buttonklick (
Code:
Looper.myLooper().quit();
Code:
@Override
public synchronized void onDestroy()
{
Log.v("Service", "Wurde beendet");
if (this.isRunning)
{
updater.interrupt();
gps.interrupt();
isRunning=false;
}
}
Es wäre schön wenn mir einer von euch einen Anhaltspunkt geben könnte wie ich das ganze so machen kann, das der Locationlistener alle 10 Minuten seine Updates bekommt und der Looper auch beendet werden kann. Ich habe mir auch schon die Beschreibung der Looper-Klasse angeschaut, nur finde ich dort keinen Hinweis auf diese ominösen 45 Sekunden.
Vielen Dank schonmal im Vorraus