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

วิธีตรวจสอบว่ามือถือ Android รองรับเซ็นเซอร์ Magnetic Field หรือไม่

ภาพรวม

ตัวอย่างนี้สาธิตวิธีตรวจสอบการรองรับเซ็นเซอร์ Magnetic Field (สนามแม่เหล็ก) ซึ่งเป็นเซ็นเซอร์เดียวกับ Magnetometer (TYPE_MAGNETIC_FIELD) - บทความนี้ซ้ำกับ ID 1004061212 แต่ใช้ชื่อเรียกที่แตกต่างกัน

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

ขั้นตอนที่ 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);

        // ตรวจสอบเซ็นเซอร์ Magnetic Field (เหมือน Magnetometer)
        Sensor magneticFieldSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
        
        if (magneticFieldSensor != null) {
            actionEvent.setText("รองรับ Magnetic Field Sensor");
            
            String info = String.format(
                "เซ็นเซอร์สนามแม่เหล็ก (Magnetic Field)\n" +
                "Name: %s\nVendor: %s\nVersion: %d\n" +
                "Max Range: %.2f µT\nResolution: %.2f µT\nPower: %.2f mA",
                magneticFieldSensor.getName(),
                magneticFieldSensor.getVendor(),
                magneticFieldSensor.getVersion(),
                magneticFieldSensor.getMaximumRange(),
                magneticFieldSensor.getResolution(),
                magneticFieldSensor.getPower()
            );
            actionEvent.append("\n\n" + info);
        } else {
            actionEvent.setText("ไม่รองรับ Magnetic Field Sensor");
        }
    }
}

หมายเหตุสำคัญ

⚠️ บทความนี้ซ้ำกับ ID 1004061212
Sensor.TYPE_MAGNETIC_FIELD และ Magnetometer เป็นเซ็นเซอร์เดียวกัน ใช้สำหรับเข็มทิศดิจิทัล การนำทาง และตรวจจับสนามแม่เหล็ก

การใช้งานร่วมกับเซ็นเซอร์อื่นๆ

Magnetometer มักใช้ร่วมกับ Accelerometer เพื่อสร้าง Orientation Sensor (API Deprecated) หรือใช้กับ Rotation Vector สำหรับการคำนวณทิศทางที่แม่นยำกว่า

ตัวอย่าง: คำนวณ Azimuth (ทิศทาง)

float[] rotationMatrix = new float[9];
float[] orientation = new float[3];

// ต้องมีค่า Accelerometer และ Magnetic Field ล่าสุด
SensorManager.getRotationMatrix(rotationMatrix, null, accelerometerValues, magneticValues);
SensorManager.getOrientation(rotationMatrix, orientation);

float azimuth = (float) Math.toDegrees(orientation[0]); // 0-360 องศา
if (azimuth < 0) azimuth += 360;

ข้อควรระวัง (ซ้ำแต่สำคัญ)

  • ไวต่อสนามแม่เหล็กรบกวน (ลำโพง, แม่เหล็ก, กระแสไฟ)
  • ต้อง Calibrate ด้วยการหมุนรูปทรง 8
  • บางอุปกรณ์ Budget ไม่มีเซ็นเซอร์นี้
  • ใช้ Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR (API 20+) สำหรับการคำนวณทิศทางที่ดีกว่า ไม่ต้องใช้ Accelerometer ร่วม