Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีตรวจสอบว่ามือถือ Android รองรับเซ็นเซอร์ Magnetometer (เข็มทิศ) หรือไม่

ภาพรวม

ตัวอย่างนี้สาธิตวิธีตรวจสอบว่าอุปกรณ์ Android รองรับเซ็นเซอร์ Magnetometer (สนามแม่เหล็ก/เข็มทิศดิจิทัล) หรือไม่ โดยใช้ SensorManager และ Sensor.TYPE_MAGNETIC_FIELD

ขั้นตอนการสร้างโปรเจกต์

ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่

Android Studio → File → New Project → Empty Activity

ขั้นตอนที่ 2: Layout (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/actionEvent"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginTop="30dp"
        android:textSize="40sp"
        android:gravity="center" />

</LinearLayout>

ขั้นตอนที่ 3: โค้ดหลัก (src/MainActivity.java)

package com.example.myapplication;

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView textView;
    SensorManager sensorManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView actionEvent = findViewById(R.id.actionEvent);
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

        // ตรวจสอบเซ็นเซอร์ Magnetometer
        Sensor magnetometer = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
        
        if (magnetometer != null) {
            actionEvent.setText("รองรับ Magnetometer (เข็มทิศ)");
            
            // แสดงข้อมูลเพิ่มเติม
            String info = String.format(
                "Name: %s\nVendor: %s\nVersion: %d\nMax Range: %.2f µT\nResolution: %.2f µT\nPower: %.2f mA",
                magnetometer.getName(),
                magnetometer.getVendor(),
                magnetometer.getVersion(),
                magnetometer.getMaximumRange(),
                magnetometer.getResolution(),
                magnetometer.getPower()
            );
            actionEvent.append("\n\n" + info);
        } else {
            actionEvent.setText("ไม่รองรับ Magnetometer");
        }
    }
}

รายละเอียดเซ็นเซอร์ TYPE_MAGNETIC_FIELD

คุณสมบัติคำอธิบาย
ประเภทHardware sensor (เซ็นเซอร์ฮาร์ดแวร์)
หน่วยวัดMicrotesla (µT)
แกน3 แกน (X, Y, Z)
การใช้งานหลักCompass, การนำทาง, ตรวจจับโลหะ

การใช้งานจริงของ Magnetometer

  • Compass App: แสดงทิศทางเหนือโลก
  • Maps/Navigation: ปรับแนวแผนที่ตามทิศทางจริง
  • Metal Detector: ตรวจจับวัตถุโลหะใกล้เคียง
  • AR/VR: ติดตามการหมุนของอุปกรณ์

ข้อควรระวัง

  • เซ็นเซอร์นี้ไวต่อสนามแม่เหล็กจากลำโพง แม่เหล็ก หรือกระแสไฟฟ้า
  • ต้อง Calibrate (ปรับเทียบ) โดยการหมุนอุปกรณ์รูปทรง 8 ก่อนใช้งาน
  • บางอุปกรณ์ราคาถูกอาจไม่มีเซ็นเซอร์นี้
  • ใน Manifest อาจเพิ่ม <uses-feature android:name="android.hardware.sensor.compass" /> เพื่อกรองอุปกรณ์บน Play Store

โค้ดสำหรับรับค่าต่อเนื่อง (Optional)

// ลงทะเบียน Listener
sensorManager.registerListener(sensorEventListener, magnetometer, SensorManager.SENSOR_DELAY_UI);

SensorEventListener sensorEventListener = new SensorEventListener() {
    @Override
    public void onSensorChanged(SensorEvent event) {
        float x = event.values[0];
        float y = event.values[1];
        float z = event.values[2];
        // คำนวณทิศทาง: Math.atan2(y, x)
    }
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) { }
};