安卓开发实例:方向传感器

调用手机的方向传感器,X轴,Y轴,Z轴的数值

activity_sensor.xml

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  tools:context="com.weijun901.randomNum.Second">

  <LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center" tools:ignore="MissingConstraints">
    <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:background="#F8BBD0"
      android:gravity="center">
      <TextView
        android:text="倾斜角(X轴):"
        android:textSize="30sp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:id="@+id/tvX" tools:ignore="HardcodedText"/>
      <TextView
        android:text="TextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:id="@+id/tv1" android:layout_weight="1"
        tools:ignore="HardcodedText,InefficientWeight"/>
    </LinearLayout>
    <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:background="#B2DFDB">
      <TextView
        android:text="滚动角(Y轴):"
        android:textSize="30dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:id="@+id/tvY" tools:ignore="HardcodedText,SpUsage"/>
      <TextView
        android:text="TextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:id="@+id/tv2" android:layout_weight="1"
        tools:ignore="HardcodedText,InefficientWeight"/>
    </LinearLayout>
    <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:background="#B3E5FC">
      <TextView
        android:text="方位角(Z轴):"
        android:textSize="30dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:id="@+id/tvZ" tools:ignore="HardcodedText,SpUsage"/>
      <TextView
        android:text="TextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:id="@+id/tv3" android:layout_weight="1"
        tools:ignore="HardcodedText,InefficientWeight"/>
    </LinearLayout>
    <Button
      android:text="Main"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:onClick="toMainActivity"
      android:id="@+id/button" tools:ignore="HardcodedText"/>
  </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

Sensor.java

java 复制代码
package com.weijun901.show;

import android.content.Intent;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

public class Sensor extends AppCompatActivity implements SensorEventListener {
  private TextView tv1;
  private TextView tv2;
  private TextView tv3;
  private SensorManager sManager;
  private android.hardware.Sensor mSensorOrientation;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sensor);

    // 设置标题栏的文字
    getSupportActionBar().setTitle("方向传感器");

    sManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    mSensorOrientation = sManager.getDefaultSensor(android.hardware.Sensor.TYPE_ORIENTATION);
    sManager.registerListener(this, mSensorOrientation, SensorManager.SENSOR_DELAY_UI);
    bindViews();
  }
  private void bindViews() {
    tv1 = findViewById(R.id.tv1);
    tv2 = findViewById(R.id.tv2);
    tv3 = findViewById(R.id.tv3);
  }
  @Override
  public void onSensorChanged(SensorEvent event) {
    tv1.setText((float) (Math.round(event.values[1] * 100)) / 100 + "°");
    tv2.setText((float) (Math.round(event.values[2] * 100)) / 100 + "°");
    tv3.setText((float) (Math.round(event.values[0] * 100)) / 100 + "°");
  }

  public void toMainActivity(View view) {
    Intent intent = new Intent(this, MainActivity.class); // 替换为目标页面的类名
    startActivity(intent);
  }

  @Override
  public void onAccuracyChanged(android.hardware.Sensor sensor, int accuracy) {

  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    sManager.unregisterListener(this);
  }
}
相关推荐
雨白12 小时前
Android 快捷方式实战指南:静态、动态与固定快捷方式详解
android
hqk12 小时前
鸿蒙项目实战:手把手带你实现 WanAndroid 布局与交互
android·前端·harmonyos
LING13 小时前
RN容器启动优化实践
android·react native
恋猫de小郭15 小时前
Flutter 发布官方 Skills ,Flutter 在 AI 领域再添一助力
android·前端·flutter
Kapaseker20 小时前
一杯美式搞懂 Any、Unit、Nothing
android·kotlin
黄林晴20 小时前
你的 Android App 还没接 AI?Gemini API 接入全攻略
android
恋猫de小郭1 天前
2026 Flutter VS React Native ,同时在 AI 时代 VS Native 开发,你没见过的版本
android·前端·flutter
冬奇Lab1 天前
PowerManagerService(上):电源状态与WakeLock管理
android·源码阅读
BoomHe2 天前
Now in Android 架构模式全面分析
android·android jetpack
二流小码农2 天前
鸿蒙开发:上传一张参考图片便可实现页面功能
android·ios·harmonyos