您的位置:首页 > 移动开发 > Android开发

android线性加速度传感器数据存储到手机的sd卡中

2016-07-07 16:17 405 查看
以前用FileOutputStream openFileOutput (String name, int mode)函数来保存txt文件,该

函数的作用是:可以方便地在手机中创建文件,并返回文件输出流,用于对文件做写入操作。

但是使用openFileOutput方法创建的文件是保存在/data/data/<package name>/files/目录中的,

如果没有root权限,难以访问。

因此,对以前的例子做了相应的改进, 将android线性加速度传感器数据存储到手机的sd卡

中的根目录下,方便查看。

MainActivity代码如下:

 

package app.coolweather.com.distance;

import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.io.File;
import java.io.RandomAccessFile;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MainActivity extends Activity implements SensorEventListener, View.OnClickListener {
private SensorManager sm;
private Button mWriteButton,mStopButton;
private TextView mTextView;
private Boolean doWrite = false;
private int count=0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView)findViewById(R.id.textView);
sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);//创建一个SensorManager来获取系统的传感器服务

mWriteButton = (Button) findViewById(R.id.Button_Write);
mWriteButton.setOnClickListener(this);
mStopButton = (Button) findViewById(R.id.Button_Stop);
mStopButton.setOnClickListener(this);
}

@Override
protected void onResume() {
super.onResume();
//  注册传感器
sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION), SensorManager.SENSOR_DELAY_GAME);
}

@Override
public void onSensorChanged(SensorEvent event) {
String message = new String();
DecimalFormat df = new DecimalFormat("#,##0.000000");
int sensorType = event.sensor.getType();
switch (sensorType) {
case Sensor.TYPE_LINEAR_ACCELERATION:
float X = event.values[0];
float Y = event.values[1];
float Z = event.values[2];
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
String str = sdf.format(new Date());
message = str + " " + df.format(X) + " " + df.format(Y) + " " + df.format(Z) + "\n";
break;
}
if (doWrite) {
writeFileSdcard(message);
}
}

/**
* 信息写入手机SD卡
* @param message 信息
*/
private void writeFileSdcard(String message) {
try {
// 如果手机插入了SD卡,而且应用程序具有访问SD的权限
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
// 获取SD卡的目录
File sdCardDir = Environment.getExternalStorageDirectory();
File targitFile = new File(sdCardDir.getCanonicalPath() + "/SensorData"+count+".txt");
// 以指定文件创建 RandomAccessFile对象
RandomAccessFile raf = new RandomAccessFile(targitFile, "rw");
// 将文件记录指针移动到最后
raf.seek(targitFile.length());
// 输出文件内容
raf.write(message.getBytes());
// 关闭RandomAccessFile
raf.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}

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

}

@Override
protected void onPause() {
super.onPause();
}

@Override
public void onClick(View v) {
if (v.getId() == R.id.Button_Write) {
doWrite = true;
count++;
mTextView.setText("Writing...SensorData"+count);
}
if (v.getId() == R.id.Button_Stop) {
doWrite = false;
mTextView.setText("SensorData"+count+" 状态:stop");
}
}
}

其中SensorManager.SENSOR_DELAY_GAME 表示获得传感器数据的速度,这个是20,000微妙的延迟,

即50次/秒。

代码免费下载地址:http://download.csdn.net/detail/baidu_28479651/9570007
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息