I have an Android Application that write one line in a file every time the method OnLocationChanged()
is called. Data inside each line is separated by a semicolon. I store the epoch time (System.currentTimeMillis()
), the latitude and the longitude of the new location:
File example 1:
1477294804758;45.17358813287331;5.750043562562213 1477294805758;45.17358813287331;5.750043562562213
Between those two lines, there is 1 second gap so everything is fine.
Most of the time, it works. But sometimes, every second, it writes two lines :
File example 2:
1477294806761;45.17358813287331;5.750043562562213 1477294806776;45.17358813287331;5.750043562562213 1477294807767;45.17358813287331;5.750043562562213 1477294807779;45.17358813287331;5.750043562562213
OnLocationChanged
is called twice every second with a 15 millis gap.
I could not find a way to reproduce this bug. It is erratic.
Here is how I implement the location provider :
locationManager = (LocationManager) this.getSystemService(LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,0,MainActivity.this);
My MainActivity
implements LocationListener
.
Here is how I write data to the file :
@Override
public void onLocationChanged(Location location) {
try {
File dataFile = new File(saveFileFlyData);
if(!dataFile.exists())
dataFile.createNewFile();
FileOutputStream fOut = null;
try {
fOut = new FileOutputStream(dataFile, true);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
OutputStreamWriter osw = new OutputStreamWriter(fOut);
try {
if(mCurrentLocation != null)
{
osw.write(System.currentTimeMillis() +
";" + mCurrentLocation.getLatitude() +
";" + mCurrentLocation.getLongitude()+
"\n"
);
}
else
{
osw.write(0 +
";" + 0 +
";" + 0+
"\n"
);
}
osw.flush();
osw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
catch (IOException e) {
Log.e("Exception", "File write failed: " + e.toString());
}
}
I cant see why it works from time to time.