广告
返回顶部
首页 > 资讯 > 移动开发 >Android 传感器与数据库开发
  • 354
分享到

Android 传感器与数据库开发

数据传感器数据库开发数据库Android 2022-06-06 13:06:41 354人浏览 泡泡鱼
摘要

声明:本文作为自己的学习笔记,欢迎大家于本人学习交流。未经本人许可,文章不得用于商业用途。转载请注明出处 开发一个 Andorid APP,使其

声明:本文作为自己的学习笔记,欢迎大家于本人学习交流。未经本人许可,文章不得用于商业用途。转载请注明出处

开发一个 Andorid APP,使其可以用手机传感器读取手机的实时加速度、角速度和方向角,并将数据保存,测试完成后可以导出。APP 全部代码已经提交至 Github

目录实验环境传感器开发在 onCreate 方法中,获取传感器管理对象获取传感器类型,分别为加速度传感器、方向传感器、角速度传感器注册传感器监听器重写 onDestroy 方法,取消监听获取传感器监听数据,这里只写了加速度传感器完整代码数据库开发新建 MyDatabaseHelper 类向数据库中添加数据运行软件数据导出从手机中导出 .db 文件将 .db 文件转为 csv 文件数据导出结果 实验环境 操作系统:win10 64 软件环境:Android Studio 3.5.3 编程语言:Java 13 传感器开发 在 onCreate 方法中,获取传感器管理对象
sensORManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
获取传感器类型,分别为加速度传感器、方向传感器、角速度传感器
Sensor sensor1 = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
Sensor sensor2 = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
Sensor sensor3 = sensorManager.getDefaultSensor(Sensor.TYPE_GAME_ROTATION_VECTOR);
注册传感器监听器
sensorManager.reGISterListener(listener1, sensor1, SensorManager.SENSOR_DELAY_GAME);
sensorManager.registerListener(listener2, sensor2, SensorManager.SENSOR_DELAY_GAME);
sensorManager.registerListener(listener3, sensor3, SensorManager.SENSOR_DELAY_GAME);
重写 onDestroy 方法,取消监听
	@Override
    protected void onDestroy() {
        super.onDestroy();
        if (sensorManager != null) {
            sensorManager.unregisterListener(listener1);
            sensorManager.unregisterListener(listener2);
            sensorManager.unregisterListener(listener3);
        }
    }
获取传感器监听数据,这里只写了加速度传感器
private SensorEventListener listener1 = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {
            float xValue = event.values[0];
            float yValue = event.values[1];
            float zValue = event.values[2];
            accelerateX.setText("加速度X: " + xValue);
            accelerateY.setText("加速度Y: " + yValue);
            accelerateZ.setText("加速度Z: " + zValue);
        }
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
        }
    };
完整代码

MainActivity.java

package com.example.myapplication;
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.widget.TextView;
public class MainActivity extends Activity {
    private TextView accelerateX;
    private TextView accelerateY;
    private TextView accelerateZ;
    private TextView angulX;
    private TextView angulY;
    private TextView angulZ;
    private TextView orientationX;
    private TextView orientationY;
    private TextView orientationZ;
    private SensorManager sensorManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        accelerateX = (TextView) findViewById(R.id.accelerateX);
        accelerateY = (TextView) findViewById(R.id.accelerateY);
        accelerateZ = (TextView) findViewById(R.id.accelerateZ);
        angulX = (TextView) findViewById(R.id.angulX);
        angulY = (TextView) findViewById(R.id.angulY);
        angulZ = (TextView) findViewById(R.id.angulZ);
        orientationX = (TextView) findViewById(R.id.orientationX);
        orientationY = (TextView) findViewById(R.id.orientationY);
        orientationZ = (TextView) findViewById(R.id.orientationZ);
        //获取传感器管理对象
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        //获取传感器类型,三个传感器分别为加速度传感器、方向传感器、角速度传感器
        Sensor sensor1 = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        Sensor sensor2 = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
        Sensor sensor3 = sensorManager.getDefaultSensor(Sensor.TYPE_GAME_ROTATION_VECTOR);
        //注册传感器监听器
        sensorManager.registerListener(listener1, sensor1, SensorManager.SENSOR_DELAY_GAME);
        sensorManager.registerListener(listener2, sensor2, SensorManager.SENSOR_DELAY_GAME);
        sensorManager.registerListener(listener3, sensor3, SensorManager.SENSOR_DELAY_GAME);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (sensorManager != null) {
            sensorManager.unregisterListener(listener1);
            sensorManager.unregisterListener(listener2);
            sensorManager.unregisterListener(listener3);
        }
    }
    private SensorEventListener listener1 = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {
            float xValue = event.values[0];
            float yValue = event.values[1];
            float zValue = event.values[2];
            accelerateX.setText("加速度X: " + xValue);
            accelerateY.setText("加速度Y: " + yValue);
            accelerateZ.setText("加速度Z: " + zValue);
        }
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
        }
    };
    private SensorEventListener listener2 = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {
            float xValue = event.values[0];
            float yValue = event.values[1];
            float zValue = event.values[2];
            angulX.setText("角速度X: " + xValue);
            angulY.setText("角速度Y: " + yValue);
            angulZ.setText("角速度Z: " + zValue);
        }
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
        }
    };
    private SensorEventListener listener3 = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {
            float xValue = event.values[0];
            float yValue = event.values[1];
            float zValue = event.values[2];
            orientationX.setText("方向X: " + xValue);
            orientationY.setText("方向Y: " + yValue);
            orientationZ.setText("方向Z: " + zValue);
        }
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
        }
    };

activity_main.xml

package com.example.myapplication;
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.widget.TextView;
public class MainActivity extends Activity {
    private TextView accelerateX;
    private TextView accelerateY;
    private TextView accelerateZ;
    private TextView angulX;
    private TextView angulY;
    private TextView angulZ;
    private TextView orientationX;
    private TextView orientationY;
    private TextView orientationZ;
    private SensorManager sensorManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        accelerateX = (TextView) findViewById(R.id.accelerateX);
        accelerateY = (TextView) findViewById(R.id.accelerateY);
        accelerateZ = (TextView) findViewById(R.id.accelerateZ);
        angulX = (TextView) findViewById(R.id.angulX);
        angulY = (TextView) findViewById(R.id.angulY);
        angulZ = (TextView) findViewById(R.id.angulZ);
        orientationX = (TextView) findViewById(R.id.orientationX);
        orientationY = (TextView) findViewById(R.id.orientationY);
        orientationZ = (TextView) findViewById(R.id.orientationZ);
        //获取传感器管理对象
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        //获取传感器类型,三个传感器分别为加速度传感器、方向传感器、角速度传感器
        Sensor sensor1 = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        Sensor sensor2 = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
        Sensor sensor3 = sensorManager.getDefaultSensor(Sensor.TYPE_GAME_ROTATION_VECTOR);
        //注册传感器监听器
        sensorManager.registerListener(listener1, sensor1, SensorManager.SENSOR_DELAY_GAME);
        sensorManager.registerListener(listener2, sensor2, SensorManager.SENSOR_DELAY_GAME);
        sensorManager.registerListener(listener3, sensor3, SensorManager.SENSOR_DELAY_GAME);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (sensorManager != null) {
            sensorManager.unregisterListener(listener1);
            sensorManager.unregisterListener(listener2);
            sensorManager.unregisterListener(listener3);
        }
    }
    private SensorEventListener listener1 = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {
            float xValue = event.values[0];
            float yValue = event.values[1];
            float zValue = event.values[2];
            accelerateX.setText("加速度X: " + xValue);
            accelerateY.setText("加速度Y: " + yValue);
            accelerateZ.setText("加速度Z: " + zValue);
        }
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
        }
    };
    private SensorEventListener listener2 = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {
            float xValue = event.values[0];
            float yValue = event.values[1];
            float zValue = event.values[2];
            orientationX.setText("角速度X: " + xValue);
            orientationY.setText("角速度Y: " + yValue);
            orientationZ.setText("角速度Z: " + zValue);
        }
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
        }
    };
    private SensorEventListener listener3 = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {
            float xValue = event.values[0];
            float yValue = event.values[1];
            float zValue = event.values[2];
            angulX.setText("方向X: " + xValue);
            angulY.setText("方向Y: " + yValue);
            angulZ.setText("方向Z: " + zValue);
        }
        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
        }
    };
数据库开发 新建 MyDatabaseHelper 类
public class MyDatabaseHelper extends sqliteOpenHelper {
    public static final String CREATE_BOOK = "create table Sensor1("
            +"id integer primary key autoincrement,"
            +"time text,"
            +"accelerateX real,"
            +"accelerateY real,"
            +"accelerateZ real,"
            +"angulX real,"
            +"angulY real,"
            +"angulZ real,"
            +"orientationX real,"
            +"orientationY real,"
            +"orientationZ real)";
    private Context mContext;
    public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version){
        super(context,name,factory,version);
        mContext = context;
    }
    @Override
    public void onCreate(SQLiteDatabase db){
        db.execSQL(CREATE_BOOK);
        Toast.makeText(mContext,"Create succeeded",Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
    }
}
向数据库中添加数据
	private void aDDData(){
        dbHelper = new MyDatabaseHelper(this,"SQLite1.db",null,1);
        dbHelper.getWritableDatabase();
        Button start = (Button)findViewById(R.id.addData_start);
        Button end = (Button)findViewById(R.id.addData_end);
        Button clear = (Button)findViewById(R.id.clear);
        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"开始保存",Toast.LENGTH_SHORT).show();
                isRecord = true;
                if (isRecord = true) {
                    Timer timer = new Timer();
                    timer.schedule(new TimerTask() {
                        @Override
                        public void run() {
                            SQLiteDatabase db = dbHelper.getWritableDatabase();
                            ContentValues values = new ContentValues();
                            values.put("time", time_value);
                            values.put("accelerateX", accelerateX_value);
                            values.put("accelerateY", accelerateY_value);
                            values.put("accelerateZ", accelerateZ_value);
                            values.put("angulX", angulX_value);
                            values.put("angulY", angulY_value);
                            values.put("angulZ", angulZ_value);
                            values.put("orientationX", orientationX_value);
                            values.put("orientationY", orientationY_value);
                            values.put("orientationZ", orientationZ_value);
                            db.insert("Sensor1", null, values);
                        }
                    }, 0, 200);
                }
            }
        });
        end.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                isRecord = false;
                Toast.makeText(MainActivity.this,"结束保存",Toast.LENGTH_SHORT).show();
            }
        });
        clear.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SQLiteDatabase db = dbHelper.getWritableDatabase();
                db.delete("Sensor1","id > ?",new String[]{"0"});
                Toast.makeText(MainActivity.this,"清除完成",Toast.LENGTH_SHORT).show();
            }
        });
    }
运行软件

点击 START 按钮开始记录数据,点击 END 按钮结束记录数据,点击 CLEAR 清除之前记录的数据
在这里插入图片描述

数据导出

数据的导出主要分为两个步骤,一是将 .db 文件从手机中导出,二是将导出的 .db 文件转为 csv 文件

从手机中导出 .db 文件

这里直接使用 Android Studio 中的 Device File Explorer 工具,这个工具在 Android Studio 界面的右下角,如图所示
Device File Explorer 工具
按照路径 /data/data/com.example.XXX(包名)/database 找到 .db 文件,如图所示
database
然后将 .db 文件另存至电脑中,这里为了方便,直接将其存至 D:/

将 .db 文件转为 csv 文件

关于将 .db 文件转为 csv 文件,参考了这篇文章:将SQLite数据库中的数据导出到CSV文件
感谢这篇文章的原创作者,如果本文有侵犯您的知识产权和版权问题,请通知本人,本人会立即做出处理并删除文章
使用 windows 上提供了一个名为 sqlite3 工具
首先,打开 WIndows 命令行:Win + R,输出 cmd,然后把目录切换到 .db 文件的路径下**(一定要把目录切换到 .db 文件的路径下,否则会找不到 table)**,输入命令

D:\>sqlite3 SQLite1.db
sqlite> .headers on
sqlite> .mode csv
sqlite> .output data.csv
sqlite> SELECT * FROM Sensor1;
sqlite> .output stdout
sqlite>

其中 data.csv 是将要输出的文件名,SQLite1.db 为 .db 文件的名称,Sensor1 为 .db 中的 table_name,运行结果如图所示
sqlite3 命令

数据导出结果

数据导出结果


作者:LouHerGetUp


--结束END--

本文标题: Android 传感器与数据库开发

本文链接: https://www.lsjlt.com/news/29099.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作