Сохранение данных датчиков в файл в android

Я делаю свой проект для записи данных с датчика акселерометра и гироскопа и сохранения его в файл на SD-карте. Но у меня проблема, когда я начинаю запись более 1 секунды, результатом в файле является только 1 данные, которые состоят из 1 оси x, оси 1 и 1 оси z. В идеале, я должен получить больше данных в файле, поскольку он записывается

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub //return inflater.inflate(R.layout.get_data, container, false); //get path from sdcard sdcard = Environment.getExternalStorageDirectory().getPath(); rootView = inflater.inflate(R.layout.get_data, container,false); Button start = (Button) rootView.findViewById(R.id.buttonstart); Button stop = (Button) rootView.findViewById(R.id.buttonstop); //eksekusi saat klik button stop stop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { rekam = false; // TODO Auto-generated method stub //sensorManager.unregisterListener(mySensorEventListener); //super.onStop(); } }); //eksekusi saat klik button start start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { rekam = true; String nama = sdcard+"/datasensor.txt"; namafile = new File(nama); } }); return rootView; public void onActivityCreated(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onActivityCreated(savedInstanceState); parent = getActivity(); sensorManager = (SensorManager) parent.getSystemService(Context.SENSOR_SERVICE); sensor = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0); sensorgyroscope = sensorManager.getSensorList(Sensor.TYPE_GYROSCOPE).get(0); koordinatX = (TextView)rootView.findViewById(R.id.coordinatx); koordinatY = (TextView)rootView.findViewById(R.id.coordinaty); koordinatZ = (TextView)rootView.findViewById(R.id.coordinatz); koordinatrollX = (TextView)rootView.findViewById(R.id.coordinatrollx); koordinatpitchY = (TextView)rootView.findViewById(R.id.coordinatpitchy); koordinatyawZ = (TextView)rootView.findViewById(R.id.coordinatyawz); sensorManager=(SensorManager) parent.getSystemService(Context.SENSOR_SERVICE); //add listener for accelerometer sensorManager.registerListener(this,sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL); //add listener for gyroscope sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE), SensorManager.SENSOR_DELAY_NORMAL); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO Auto-generated method stub } @Override public void onSensorChanged(SensorEvent event) { // TODO Auto-generated method stub if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER) { //assign directions accelometer float x = event.values[0]; float y = event.values[1]; float z = event.values[2]; koordinatX.setText("X: "+x); koordinatY.setText("Y: "+y); koordinatZ.setText("Z: "+z); if(rekam==true) { try { BufferedWriter out = new BufferedWriter(new FileWriter(namafile)); out.write(Float.toString(event.values[0]) + Float.toString(event.values[1]) + Float.toString(event.values[2]) ); out.close(); } catch (IOException e) { System.out.println("Exception"); } } } if(event.sensor.getType()==Sensor.TYPE_GYROSCOPE) { float roolX = event.values[0]; float pitchY = event.values[1]; float yawZ = event.values[2]; koordinatrollX.setText("Orientation X (Roll) :" + Float.toString(event.values[0])); koordinatpitchY.setText("Orientation Y (Pitch) :" + Float.toString(event.values[1])); koordinatyawZ.setText("Orientation Z (Yaw):" + Float.toString(event.values[2])); if(rekam==true) { try { BufferedWriter out = new BufferedWriter(new FileWriter(namafile)); out.write(Float.toString(event.values[0]) + Float.toString(event.values[1]) + Float.toString(event.values[2]) ); out.close(); } catch (IOException e) { System.out.println("Exception"); } } } } } 

Вместо buf.write() попробуйте buf.append()

Он будет добавлять новые показания датчика, а не писать, когда вы используете buf.write()

Вы должны использовать:

 BufferedWriter out = new BufferedWriter(new FileWriter(namafile)); 

внутри:

  //eksekusi saat klik button start start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { rekam = true; String nama = sdcard+"/datasensor.txt"; namafile = new File(nama); //use it here. BufferedWriter out = new BufferedWriter(new FileWriter(namafile)); } }); 

также:

 out.close(); 

Должно быть внутри другой «остановки» onClick.

 //eksekusi saat klik button stop stop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { rekam = false; out.close(); } }); 

И, как сказал Шехроз, вы должны использовать,

 out.append(Float.toString(event.values[0]) + Float.toString(event.values[1]) + Float.toString(event.values[2]) ); 

Надеюсь, что ответ на ваш вопрос.

Intereting Posts
Доступ к общим предпочтениям из разных действий (Android) Android Rxjava подписаться на изменение переменной Android: Поддерживается ли JDBC на устройствах Android? Android: программно воспроизводить звук затвора камеры Устанавливайте приложения без помощи разрешения INSTALL_PACKAGES Как программно открыть встроенный эквалайзер в Android? ListRragment не показывает изменений в настоящее время Как установить / удалить apk android с помощью phoneGap? Как не загорать PhoneStateListener.CALL_STATE_RINGING, если уже разговаривает, и второй вызывающий звонит Требуется аутентификация. Вам нужно войти в аккаунт Google Play. В биллинге в приложении Кинжал и нож для масла против андронов Android «ОШИБКА: инициализация OpenGLES не удалась!» На CentOS с Android-SKD Что такое мой appID на developer.paypal Как избежать многократного срабатывания события onClick, когда пользователь нажимает кнопку несколько раз очень быстро? Nullpointerexception getSystemService