本篇介绍如何获取加速度数据并存储到csv文件中
一、想要达到的效果
功能:
1、点击开始按钮时,启动加速度传感器,读取数据,显示到屏幕上,且存入到List中;
2、点击停止按钮,停止加速度传感器,并将List中数据存入csv文件。
知识点:
1、一个activity怎样实现两个接口
2、怎样获得传感器服务,注册服务,注销服务
3、怎样获得button、textview句柄,以便操作
4、怎样关联button的click事件
二、activity文件
三、java代码文件
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Environment;
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.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.util.Log;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.List;
public class MainActivity extends AppCompatActivity implements SensorEventListener,View.OnClickListener {
private SensorManager mSensorMgr;
private TextView tvx;
private TextView tvy;
private TextView tvz;
private ListLS;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LS=new ArrayList();
Button bt=findViewById(R.id.bt_dsp);
bt.setOnClickListener(this);
Button bt_stop=findViewById(R.id.bt_stop);
bt_stop.setOnClickListener(this);
tvx=findViewById(R.id.tvx);
tvy=findViewById(R.id.tvy);
tvz=findViewById(R.id.tvz);
//
mSensorMgr=(SensorManager)getSystemService(Context.SENSOR_SERVICE);
}
protected void onPause()
{
super.onPause();
mSensorMgr.unregisterListener(this);
}
protected void onResume()
{
super.onResume();
}
protected void onStop()
{
super.onStop();
mSensorMgr.unregisterListener(this);
}
public void onSensorChanged(SensorEvent event)
{
if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER)
{
float[] values=event.values;
tvx.setText("ACC_X: "+Float.toString(values[0]));
tvy.setText("ACC_Y: "+Float.toString(values[1]));
tvz.setText("ACC_Z: "+Float.toString(values[2]));
Date date=new Date();
SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time=formatter.format(date);
String s="";
s=time+" "+Float.toString(values[0])+" "+Float.toString(values[1])+" "+Float.toString(values[2])+"\n";
LS.add(s);
}
}
public void onAccuracyChanged(Sensor sensor,int accuracy)
{//不用处理,空着就行
return;
}
private static final String TAG = "ACCCollection:";
public static void writeLS(ListLS) {
try {
String path=Environment.getExternalStorageDirectory().getAbsolutePath()+"/aaa/";
File folde=new File(path);
//tvx.setText(path);
Log.i(TAG, "write: -------1");
if (!folde.exists() || !folde.isDirectory())
{
Log.i(TAG, "write: --------2");
folde.mkdirs();
}
File file=new File(path,"aa.csv");
if(!file.exists())
{
file.createNewFile();
}
BufferedWriter bw = new BufferedWriter(new FileWriter(file, true));
int i;
for(i=0;i