Andoid Studio-android开发05-获取加速度传感器数据并存储到文件中

本篇介绍如何获取加速度数据并存储到csv文件中

一、想要达到的效果

 

功能:

1、点击开始按钮时,启动加速度传感器,读取数据,显示到屏幕上,且存入到List中

2、点击停止按钮,停止加速度传感器,并将List中数据存入csv文件

知识点:

1、一个activity怎样实现两个接口

2、怎样获得传感器服务,注册服务,注销服务

3、怎样获得button、textview句柄,以便操作

4、怎样关联button的click事件

二、activity文件

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">


    <TextView
        android:id="@+id/tvx"
        android:layout_width="214dp"
        android:layout_height="69dp"
        android:text="TextView"
        tools:layout_editor_absoluteX="117dp"
        tools:layout_editor_absoluteY="100dp" />

    <TextView
        android:id="@+id/tvy"
        android:layout_width="214dp"
        android:layout_height="53dp"
        android:text="TextView"
        tools:layout_editor_absoluteX="126dp"
        tools:layout_editor_absoluteY="158dp" />

    <TextView
        android:id="@+id/tvz"
        android:layout_width="214dp"
        android:layout_height="53dp"
        android:text="TextView"
        tools:layout_editor_absoluteX="130dp"
        tools:layout_editor_absoluteY="234dp" />

    <Button
        android:id="@+id/bt_dsp"
        android:layout_width="131dp"
        android:layout_height="79dp"
        android:text="开始显示加速度"
        tools:layout_editor_absoluteX="115dp"
        tools:layout_editor_absoluteY="444dp" />

    <Button
        android:id="@+id/bt_stop"
        android:layout_width="217dp"
        android:layout_height="81dp"
        android:text="停止显示加速度" />

</LinearLayout>

三、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  List<String> LS;

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

        LS=new ArrayList<String>();

        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(List<String> LS) {
        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<LS.size();i++)
            {
                bw.write(LS.get(i));;
                bw.newLine();// 行换行
            }
            bw.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }



    public void onClick(View v)
    {
         if(v.getId()==R.id.bt_dsp)
         {
             mSensorMgr.unregisterListener(this,mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER));
             mSensorMgr.registerListener(this,
                     mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                     SensorManager.SENSOR_DELAY_NORMAL);
             LS.clear();
             return;
         }
         if(v.getId()==R.id.bt_stop)
         {
             mSensorMgr.unregisterListener(this);

             writeLS(LS);

             return;
         }
    }
}
  • 11
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
Android Studio 是一款集成开发环境(IDE),专门用于开发 Android 应用程序。它提供了丰富的功能和强大的工具,使开发者能够方便地创建、调试和部署 Android 应用。 在 Android Studio 创建和管理项目非常简单。通过菜单或快捷键,我们可以轻松地创建新的 Android 项目,并选择适合的模板。在项目,我们可以创建多个模块,每个模块可以独立进行开发和测试。 Android Studio 还提供了丰富的代码编写和编辑工具。它支持代码自动完成、语法高亮以及错误检查等功能,可以帮助开发者编写出更加规范和高效的代码。同时,Android Studio 还支持 Git 和 GitHub,方便开发者进行版本控制和团队协作。 除了代码编写,Android Studio 还提供了丰富的调试工具。我们可以在模拟器或真机上进行调试,并实时查看变量的值、堆栈跟踪和日志输出等。这些工具可以帮助开发者快速定位和解决问题,提高开发效率。 在 Android Studio ,我们可以使用 Android 设备模拟器进行应用程序测试。它提供了多个虚拟设备配置,可以模拟不同的屏幕尺寸、分辨率和操作系统版本。这样,开发者可以在不同环境下测试应用程序的兼容性和性能。 总之,Android Studio 是一款功能强大的开发工具,支持开发者创建、编写、调试和测试 Android 应用程序。它提供了丰富的功能和工具,可以帮助开发者快速开发高质量的应用。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值