1

我正在做一个项目,我想收集带有坐标的传感器数据并将它们保存到 csv 文件中。

在我开始编码以获取位置之前,该应用程序运行良好。

我正在使用位置管理器,但每次我在我的设备上安装此应用程序时,该应用程序似乎都无法正常工作。安装几秒钟后我消失了。

另请注意,我每 20 毫秒保存一次传感器数据,所以我应该以相同的速率收集坐标数据吗?

很抱歉放了整个代码,但我需要帮助!请让我知道我应该在哪里进行更改?



public class MainActivity extends AppCompatActivity implements SensorEventListener, LocationListener {
    private SensorManager sensorManager;
    private Sensor magnetic;

    //Location
    LocationManager locationManager;
    Handler handler;
    Location location;

    double latitude;
    double longitude;

    // --o


    private int counter = 1;

    private boolean recording = false;
    private boolean counterOn = false;

    private float magValues[] = new float[3];

    private Context context;

    private static final int REQUESTCODE_STORAGE_PERMISSION = 1;

    Collection<String[]> magneticData = new ArrayList<>();

    private CsvWriter csvWriter = null;

    public static DecimalFormat DECIMAL_FORMATTER;

    TextView stateText;
    EditText fileIDEdit;

    //Location
    TextView lat;
    TextView lon;
    //--o

    TextView magText;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Location
        handler = new Handler();

        lat = (TextView) findViewById(R.id.latitudeTextView);
        lon = (TextView) findViewById(R.id.longitudeTextView);

        //--o


        findViewById(R.id.button).setOnClickListener(listenerStartButton);
        findViewById(R.id.button2).setOnClickListener(listenerStopButton);

        fileIDEdit = (EditText)findViewById(R.id.editText);
        magText = (TextView) findViewById(R.id.textView3);

        stateText = (TextView) findViewById(R.id.textView);
        stateText.setText("Stand by");

        context = this;

        // Sensor
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        magnetic = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

        DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.US);
        symbols.setDecimalSeparator('.');
        DECIMAL_FORMATTER = new DecimalFormat("#.000", symbols);

        //Location
        handler.postDelayed(runLocation, 1000);

    }
    public Runnable runLocation = new Runnable() {
        @Override
        public void run() {
            lat.setText(String.valueOf(latitude));
            lon.setText(String.valueOf(longitude));
            Toast.makeText(MainActivity.this, "location check", Toast.LENGTH_SHORT).show();

            MainActivity.this.handler.postDelayed(MainActivity.this.runLocation, 5000);
        }
    };

    private View.OnClickListener listenerStartButton = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            recording = true;
            stateText.setText("Recording started");
            stateText.setTextColor(Color.parseColor("#FF0000"));
        }
    };

   



    @Override
    public void onSensorChanged(SensorEvent event) {
        long timeInMillisec = (new Date()).getTime() + (event.timestamp - System.nanoTime()) / 1000000L;

        // Some sensor operations
            }
            //magneticData.add(new String[]{String.valueOf(timeInMillisec), String.valueOf(magValues[0]), String.valueOf(magValues[1]), String.valueOf(magValues[2])});
            @SuppressLint("SimpleDateFormat") SimpleDateFormat logLineStamp = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss:SSS", Locale.getDefault());
            //logLineStamp.setTimeZone(TimeZone.getTimeZone("UTC"));


            magneticData.add(new String[]{logLineStamp.format(new Date(timeInMillisec)), String.valueOf(x), String.valueOf(y), String.valueOf(z), String.valueOf(magnitude), String.valueOf(latitude),  String.valueOf(longitude)});
            counter++;
        }
    }
    // Checks if the the storage permissions are given or not by the user
    // It will request the use if not
    private static boolean storagePermitted(Activity activity){
        // Check read write permission
        


}
//Check Location

private void getLocation() {
    if (ActivityCompat.checkSelfPermission(this,
            Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]
                        {Manifest.permission.ACCESS_FINE_LOCATION},
                REQUEST_LOCATION_PERMISSION);
    } else {
        locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, this);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, this);
        location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
        if (location != null){
            latitude = location.getLatitude();
            longitude = location.getLongitude();
        }
    }
}

    // Added Later

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }

    @Override
    public void onLocationChanged(Location location) {
        latitude = location.getLatitude();
        longitude = location.getLongitude();

        lat.setText(String.valueOf(latitude));
        lon.setText(String.valueOf(longitude));
        Toast.makeText(MainActivity.this, "location changed: "+latitude+" "+longitude, Toast.LENGTH_LONG).show();


    }

    @Override
    public void onStatusChanged(String s, int i, Bundle bundle) {

    }

    @Override
    public void onProviderEnabled(String s) {

    }

    @Override
    public void onProviderDisabled(String s) {

    }
}

4

0 回答 0