import android.content.Context;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.os.Handler;import android.os.Message;import android.util.Log;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;public class ImuData {    private SensorManager sensorManager;    private Handler sensorHandler;    private Context context;    private float accx;    private float accy;    private float accz;    private float gyrox;    private float gyroy;    private float gyroz;    private float magx;    private float magy;    private float magz;    private static File sensorDir = null;    private FileOutputStream sensorFOS;    private File sensorData;    private int count = 1;    private float[] accOutput = new float[3];     // 加速度计变量    private float[] gyroOutput = new float[3];     // 陀螺仪变量    private float[] magOutput = new float[3];     // 磁力计变量    public ImuData(Context context, File datadir) {        this.context = context;        initSensor();        sensorHandler = new Handler() {            @Override            public void handleMessage(Message msg) {                if(msg.what == 0x125){                    saveSensorData();                }            }        };    }    private void saveSensorData() {        try{            sensorFOS.write( (count + " ").getBytes() );            sensorFOS.write( (accOutput[0] + " " + accOutput[1] + " " + accOutput[2] + " " ).getBytes() );            sensorFOS.write( (gyroOutput[0] + " " + gyroOutput[1] + " " + gyroOutput[2] + " ").getBytes() );            sensorFOS.write( (magOutput[0] + " " + magOutput[1] + " " + magOutput[2] + " "+"\n").getBytes() );            sensorFOS.flush();        } catch (IOException e){            e.printStackTrace();        }    }    private void initSensor() {        sensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);        Sensor sensora = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);        sensorManager.registerListener(listenera, sensora, SensorManager.SENSOR_DELAY_GAME);        Sensor sensorg = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);        sensorManager.registerListener(listenerg, sensorg, SensorManager.SENSOR_DELAY_GAME);        Sensor sensorm = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);        sensorManager.registerListener(listenerm, sensorm, SensorManager.SENSOR_DELAY_GAME);        sensorData = getSensorFile();        try{            sensorFOS = new FileOutputStream(sensorData);        } catch (FileNotFoundException e){            e.printStackTrace();        }    }    private SensorEventListener listenera = new SensorEventListener() {        @Override        public void onSensorChanged(SensorEvent event) {            float accx = event.values[0];            float accy = event.values[1];            float accz = event.values[2];        }        @Override        public void onAccuracyChanged(Sensor sensor, int accuracy) {        }    };    private SensorEventListener listenerg = new SensorEventListener() {        @Override        public void onSensorChanged(SensorEvent event) {            float gyrox = event.values[0];            float gyroy = event.values[1];            float gyroz = event.values[2];        }        @Override        public void onAccuracyChanged(Sensor sensor, int accuracy) {        }    };    private SensorEventListener listenerm = new SensorEventListener() {        @Override        public void onSensorChanged(SensorEvent event) {            float magx = event.values[0];            float magy = event.values[1];            float magz = event.values[2];        }        @Override        public void onAccuracyChanged(Sensor sensor, int accuracy) {        }    };    private static File getSensorFile(){        //  类的创建方法直接获得MainActivity里建立的dataDir路径        if(sensorDir == null)        {            String folderName = new SimpleDateFormat("yyyyMMdd_HHmm").format(new Date());            sensorDir = new File("/sdcard/sensor_data/" + folderName);            // 创建sensor存储目录            if (!sensorDir.exists()){                if (!sensorDir.mkdirs()){                    Log.d("MyCameraApp", "failed to create sensor directory");                    return null;}            }        }//        File sensorFile;        sensorFile = new File( sensorDir.getPath() + File.separator +                "Sensor.txt");        return sensorFile;    }    public void releaseSensor(){        try{            sensorFOS.close();        } catch (IOException e){            e.printStackTrace();        }        if (sensorManager != null) {            sensorManager.unregisterListener(listenera);            sensorManager.unregisterListener(listenerg);            sensorManager.unregisterListener(listenerm);        }    }}

更多相关文章

  1. Android(安卓)技术专题系列之三 -- 编译(build) 流程
  2. Android编译系统-上
  3. Android自动化测试之如何安装Android虚拟机(三)
  4. 基于CentOS 6.4 使用Jenkins 进行Android集成打包
  5. 修改Android(安卓)Studio下的AVD的下载路径
  6. Android用Application设置全局变量以及使用
  7. 使用Kotlin开发Android基础介绍
  8. Android应用程序键盘(Keyboard)消息处理机制分析(25)
  9. Android(安卓)JNI和NDK学习(3)--Android.mk分析

随机推荐

  1. 认识Gradle
  2. android获得密钥
  3. 关于Android中解析xml文件qName和localNa
  4. Android(安卓)4.0.1 源码下载,模拟器编译
  5. Android 支持的度量单位
  6. How to study Android OpenGL ES
  7. Android(安卓)中的XMPP 应用
  8. Android使用FFmpeg(七)--ffmpeg实现暂停
  9. Android使用FFmpeg动态库播放视频
  10. Android基础之Android系统架构