我有一个Android应用程序,每次调用方法OnLocationChanged()
时都会在文件中写一行。每行内的数据用分号分隔。我存储了纪元时间(System.currentTimeMillis()
),新位置的纬度和经度:
文件示例1:
147729480的 4758 ; 45.17358813287331; 5.750043562562213 147729480的 5758 ; 45.17358813287331; 5.750043562562213
在这两行之间,有1秒的差距所以一切都很好。
大多数时候,它都有效。但有时,每一秒,它写两行:
文件示例2:
147729480的 6761 ; 45.17358813287331; 5.750043562562213 1477294806776; 45.17358813287331; 5.750043562562213 147729480的 7767 ; 45.17358813287331; 5.750043562562213 1477294807779; 45.17358813287331; 5.750043562562213
OnLocationChanged
每秒调用两次,间隙为15毫秒。
我找不到重现此错误的方法。这是不稳定的。
以下是我实施位置提供程序的方法:
locationManager = (LocationManager) this.getSystemService(LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,0,MainActivity.this);
我的MainActivity
实施LocationListener
。
以下是我如何将数据写入文件:
@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());
}
}
我不知道为什么它会不时起作用。