Android 获取imu数据

本文介绍了一个具体的Android应用程序案例,展示了如何使用Android设备内置的各种传感器,如加速度计、陀螺仪和磁力计,并实时显示这些传感器的数据。通过实例代码详细讲解了如何获取传感器数据并更新UI。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



https://blog.youkuaiyun.com/roadoneplus/article/details/52669095

https://blog.youkuaiyun.com/roadoneplus/article/details/52669095

MainActivity.java

package com.example.hhh;

//import android.app.Activity;
//import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.WindowManager;

import java.security.PublicKey;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.R.integer;
import android.R.string;
import android.accounts.Account;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


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 implements OnClickListener {
 
   //声明变量
   //private Handler mHandler;
  
   //private Button back ;
   Button back ;
  
  
   private SensorManager sensorManager;
   private TextView accxText;
   private TextView accyText;
   private TextView acczText;
   private TextView gyroxText;
   private TextView gyroyText;
   private TextView gyrozText;
   private TextView magxText;
   private TextView magyText;
   private TextView magzText;
  
  
  
  
   /*@Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
               WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏
       setContentView(R.layout.main_activity);
      
       back=(Button) findViewById(R.id.back);
      // 对登录按钮设置监听,方法由下面的Onclick实现
       back.setOnClickListener(this);
 
   }*/
  
   @Override
   //实现登录按钮的跳转
   
   public void onClick(View v) {
     // 根据id判断单击的是哪个控件,固定写法
     switch (v.getId()) {
     case R.id.back:
       back();
       break;
     default:
       break;
     }
   }
  
  
   // 登录方法
   public void back() {
   //实现界面的跳转
  Intent intent = new Intent(MainActivity.this,LoginActivity.class);
       startActivity(intent);
       //关闭当前界面
      // finish();
      
       //return true;
   } 
 
 
 
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       // Inflate the menu; this adds items to the action bar if it is present.
       getMenuInflater().inflate(R.menu.main, menu);
       return true;
   }
 
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
       // Handle action bar item clicks here. The action bar will
       // automatically handle clicks on the Home/Up button, so long
       // as you specify a parent activity in AndroidManifest.xml.
       int id = item.getItemId();
       if (id == R.id.action_settings) {
           return true;
       }
       return super.onOptionsItemSelected(item);
   }
  
  
 //}
  
   @Override
   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
   
    back=(Button) findViewById(R.id.back);
      // 对登录按钮设置监听,方法由下面的Onclick实现
       back.setOnClickListener(this);
  
    accxText = (TextView) findViewById(R.id.accx);
    accyText = (TextView) findViewById(R.id.accy);
    acczText = (TextView) findViewById(R.id.accz);
    gyroxText = (TextView) findViewById(R.id.gyrox);
    gyroyText = (TextView) findViewById(R.id.gyroy);
    gyrozText = (TextView) findViewById(R.id.gyroz);
    magxText = (TextView) findViewById(R.id.magx);
    magyText = (TextView) findViewById(R.id.magy);
    magzText = (TextView) findViewById(R.id.magz);
    sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    Sensor sensora = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    sensorManager.registerListener(listenera, sensora, SensorManager.SENSOR_DELAY_GAME);
    Sensor sensorg = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
    sensorManager.registerListener(listenerg, sensorg, SensorManager.SENSOR_DELAY_GAME);
    Sensor sensorm = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
    sensorManager.registerListener(listenerm, sensorm, SensorManager.SENSOR_DELAY_GAME);
   }
 
   private SensorEventListener listenera = new SensorEventListener() {
   @Override
   public void onSensorChanged(SensorEvent event) {
    float accx = event.values[0];
    float accy = event.values[1];
    float accz = event.values[2];
    accxText.setText("accx:" + accx);
    accyText.setText("accy:" + accy);
    acczText.setText("accz:" + accz);
   }
 
   @Override
   public void onAccuracyChanged(Sensor sensor, int accuracy) {
 
    }
   };
 
   private SensorEventListener listenerg = new SensorEventListener() {
   @Override
   public void onSensorChanged(SensorEvent event) {
     float gyrox = event.values[0];
     float gyroy = event.values[1];
     float gyroz = event.values[2];
     gyroxText.setText("gyrox:" + gyrox);
     gyroyText.setText("gyroy:" + gyroy);
     gyrozText.setText("gyroz:" + gyroz);
   }
 
   @Override
   public void onAccuracyChanged(Sensor sensor, int accuracy) {
 
    }
   };
 
   private SensorEventListener listenerm = new SensorEventListener() {
   @Override
   public void onSensorChanged(SensorEvent event) {
    float magx = event.values[0];
    float magy = event.values[1];
    float magz = event.values[2];
    magxText.setText("magx:" + magx);
    magyText.setText("magy:" + magy);
    magzText.setText("magz:" + magz);
   }
 
   @Override
   public void onAccuracyChanged(Sensor sensor, int accuracy) {
 
    }
   };
 
   @Override
   protected void onDestroy() {
    super.onDestroy();
    if (sensorManager != null) {
     sensorManager.unregisterListener(listenera);
     sensorManager.unregisterListener(listenerg);
     sensorManager.unregisterListener(listenerm);
    }
   }

   }

xml 代码
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnCount="1" >

    <TextView
        android:id="@+id/accx"
        android:layout_gravity=""
        android:text="" />

    <TextView
        android:id="@+id/accy"
        android:layout_gravity=""
        android:text="" />

    <TextView
        android:id="@+id/accz"
        android:layout_gravity=""
        android:text="" />

    <TextView
        android:id="@+id/gyrox"
        android:layout_gravity=""
        android:text="" />

    <TextView
        android:id="@+id/gyroy"
        android:layout_gravity=""
        android:text="" />

    <TextView
        android:id="@+id/gyroz"
        android:layout_gravity=""
        android:text="" />

    <TextView
        android:id="@+id/magx"
        android:layout_gravity=""
        android:text="" />

    <TextView
        android:id="@+id/magy"
        android:layout_gravity=""
        android:text="magy" />

    <TextView
        android:id="@+id/magz"
        android:layout_gravity="left|top"
        android:layout_row="11"
        android:text="magz" />

    <Button
        android:id="@+id/button1"
        android:layout_column="0"
        android:layout_gravity="right|center_vertical"
        android:layout_row="12"
        android:text="下一页" />

    <Button
        android:id="@+id/back"
        android:layout_column="0"
        android:layout_gravity="center"
        android:layout_row="12"
        android:text="上一页" />

</GridLayout>
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值