经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
Android采集传感器数据并显示的方法
来源:jb51  时间:2021/10/19 15:31:56  对本文有异议

本文实例为大家分享了Android采集传感器数据并显示的具体代码,供大家参考,具体内容如下

需要的知识

  • Android 项目主配置文件 AndroidManifest.xml
  • Android Activity 概念
  • Android Sensor 接口
  • Android UI 布局管理器、文本框组件、编辑框组件

代码及解释

1.布局文件,用于控制UI界面显示,这里使用了表格布局管理器和四个行,每一行之中有四列,其中外面的两列是为了让中间两列居中,而中间两列分别是一个显示数据来源的TextView文本框组件和一个显示数据值的编辑框组件。

  1. <!-- activity_main.xml -->
  2. <?xml version="1.0" encoding="utf-8"?>
  3. <!-- 表格布局管理器TableLayout -->
  4. <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
  5. xmlns:tools="http://schemas.android.com/tools"
  6. android:layout_width="match_parent"
  7. android:layout_height="match_parent"
  8. android:paddingBottom="16dp"
  9. android:paddingLeft="16dp"
  10. android:paddingRight="16dp"
  11. android:paddingTop="16dp"
  12. android:stretchColumns="0,3"
  13. tools:context=".MainActivity" >
  14.  
  15. <!--三行,传感器数据显示-->
  16. <TableRow android:paddingTop="10dp">
  17. <!--文本框组件-->
  18. <TextView />
  19. <TextView
  20. android:layout_width="wrap_content"
  21. android:layout_height="wrap_content"
  22. android:text="x轴加速度:"
  23. android:textSize="18sp"
  24. android:gravity="center_horizontal"/>
  25. <!--编辑框组件-->
  26. <EditText
  27. android:id="@+id/et1"
  28. android:layout_width="wrap_content"
  29. android:layout_height="wrap_content"
  30. android:hint="000"/>
  31. <TextView />
  32. </TableRow>
  33.  
  34. <TableRow >
  35. <TextView />
  36. <TextView
  37. android:layout_width="wrap_content"
  38. android:layout_height="wrap_content"
  39. android:text="y轴加速度:"
  40. android:textSize="18sp"
  41. android:gravity="center_horizontal"/>
  42.  
  43. <EditText
  44. android:id="@+id/et2"
  45. android:layout_width="wrap_content"
  46. android:layout_height="wrap_content"
  47. android:hint="000"/>
  48. <TextView />
  49. </TableRow>
  50.  
  51. <TableRow >
  52. <TextView />
  53. <TextView
  54. android:layout_width="wrap_content"
  55. android:layout_height="wrap_content"
  56. android:text="z轴加速度:"
  57. android:textSize="18sp"
  58. android:gravity="center_horizontal"/>
  59.  
  60. <EditText
  61. android:id="@+id/et3"
  62. android:layout_width="wrap_content"
  63. android:layout_height="wrap_content"
  64. android:hint="000"/>
  65. <TextView />
  66. </TableRow>
  67. </TableLayout>

2.程序文件,用于采集传感器数据并控制其显示

关于 Android Activity 有很多资料,这里就说其是一个 Android 程序的一个页面及其对应的执行内容;Activity 的生命流程,onCreate( ),onStart( ),onResume( )…

采集传感器数据有三步,首先获取一个传感器管理器对象,然后注册监听器,最后判断传感器值改变时是否需要的传感器类型,然后做出刷新或其它反应;

  1. // MainActivity.java
  2. package com.example.myapplication;
  3.  
  4. import androidx.appcompat.app.AppCompatActivity;
  5.  
  6. import android.content.Context;
  7. import android.hardware.Sensor;
  8. import android.hardware.SensorEvent;
  9. import android.hardware.SensorEventListener;
  10. import android.hardware.SensorManager;
  11. import android.os.Bundle;
  12. import android.widget.EditText;
  13.  
  14. public class MainActivity extends AppCompatActivity implements SensorEventListener { // 实现Sensor Event Listener接口
  15. private EditText textAcceX,textAcceY,textAcceZ; //编辑框组件
  16. private SensorManager sensorManager; //传感器管理器组件
  17. @Override
  18. protected void onCreate(Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.activity_main);
  21. textAcceX = findViewById(R.id.et1);
  22. textAcceY = findViewById(R.id.et2);
  23. textAcceZ = findViewById(R.id.et3);
  24. sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); // 获取传感器管理器
  25. }
  26.  
  27. @Override
  28. protected void onResume() {
  29. super.onResume();
  30. //设置传感器类型及采样率
  31. sensorManager.registerListener(this,
  32. sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_UI);
  33. }
  34.  
  35. @Override
  36. protected void onPause() {
  37. super.onPause();
  38. sensorManager.unregisterListener(this); // 暂停采集
  39. }
  40.  
  41. @Override
  42. public void onSensorChanged(SensorEvent event) { // 重写SensorEventListener接口的方法
  43. float [] values = event.values;
  44. int sensorType = event.sensor.getType();
  45. StringBuilder stringBuilderX = null,stringBuilderY = null,stringBuilderZ = null;
  46. if(sensorType == Sensor.TYPE_ACCELEROMETER ){ // 判断是否所需传感器
  47. stringBuilderX = new StringBuilder();
  48. stringBuilderY = new StringBuilder();
  49. stringBuilderZ = new StringBuilder();
  50. stringBuilderX.append(values[0]);
  51. stringBuilderY.append(values[1]);
  52. stringBuilderZ.append(values[2]);
  53. textAcceX.setText(stringBuilderX.toString()); // 编辑框内显示
  54. textAcceY.setText(stringBuilderY.toString());
  55. textAcceZ.setText(stringBuilderZ.toString());
  56. }
  57. }
  58.  
  59. @Override
  60. public void onAccuracyChanged(Sensor sensor, int accuracy) { // 重写SensorEventListener接口的方法
  61.  
  62. }
  63. }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号