Andoid Studio-android开发04-获取加速度传感器数据并显示在屏幕上
程序员文章站
2022-03-11 21:47:51
android手机内有多个传感器,比如加速度计、陀螺仪等。本篇介绍如何获取加速度数据并显示到TextView上。...
android手机内有多个传感器,比如加速度计、陀螺仪等。
本篇介绍如何获取加速度数据并显示到TextView上。
一、想要达到的效果
功能:
1、点击开始按钮时,启动加速度传感器,读取数据,显示到屏幕上;
2、点击停止按钮,停止加速度传感器。
知识点:
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.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;
public class MainActivity extends AppCompatActivity implements SensorEventListener,View.OnClickListener {
private SensorManager mSensorMgr;
private TextView tvx;
private TextView tvy;
private TextView tvz;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
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]));
}
}
public void onAccuracyChanged(Sensor sensor,int accuracy)
{//不用处理,空着就行
return;
}
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);
return;
}
if(v.getId()==R.id.bt_stop)
{
mSensorMgr.unregisterListener(this);
return;
}
}
}
本文地址:https://blog.csdn.net/weixin_43917370/article/details/107945129