为什么OnLocationChanged每秒调用两次?

时间:2016-10-24 16:20:13

标签: java android localization gps on-location-changed

我有一个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());
        }
    }

我不知道为什么它会不时起作用。

0 个答案:

没有答案