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

วิธีตรวจสอบว่ามือถือ Android รองรับ Dynamic Sensor Discovery หรือไม่

ภาพรวม

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

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

ขั้นตอนที่ 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.SensorManager;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView textView;
    SensorManager sensorManager;

    @RequiresApi(api = Build.VERSION_CODES.N)
    @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);

        // ตรวจสอบ Dynamic Sensor Discovery Support
        boolean supported = sensorManager.isDynamicSensorDiscoverySupported();
        actionEvent.setText("Dynamic Sensor Discovery: " + (supported ? "รองรับ" : "ไม่รองรับ"));
    }
}

Dynamic Sensor Discovery คืออะไร?

คุณสมบัติที่อนุญาตให้ระบบ เพิ่ม (Add) หรือลบ (Remove) เซ็นเซอร์ได้แบบไดนามิก ขณะที่ระบบทำงานอยู่ โดยไม่ต้อง Reboot เช่น:

  • เชื่อมต่ออุปกรณ์ Wearable (Smartwatch, Heart rate monitor) ผ่าน Bluetooth → เซ็นเซอร์ใหม่ปรากฏขึ้น
  • ยกเลิกการเชื่อมต่อ → เซ็นเซอร์หายไป
  • เปิด/ปิดฟีเจอร์บนอุปกรณ์ IoT → เซ็นเซอร์ปรากฏ/หาย

API ที่เกี่ยวข้อง (API 24+)

เมธอด/คลาสคำอธิบาย
isDynamicSensorDiscoverySupported()ตรวจสอบว่ารองรับหรือไม่
SensorManager.DynamicSensorCallbackCallback เมื่อเซ็นเซอร์ถูกเพิ่ม/ลบ
onDynamicSensorConnected(Sensor sensor)เรียกเมื่อมีเซ็นเซอร์ใหม่เชื่อมต่อ
onDynamicSensorDisconnected(Sensor sensor)เรียกเมื่อเซ็นเซอร์ถูกตัดการเชื่อมต่อ

ตัวอย่างการใช้งาน Dynamic Sensor Callback

SensorManager.DynamicSensorCallback callback = new SensorManager.DynamicSensorCallback() {
    @Override
    public void onDynamicSensorConnected(Sensor sensor) {
        Log.d("Sensor", "เซ็นเซอร์ใหม่เชื่อมต่อ: " + sensor.getName() + " (Type: " + sensor.getType() + ")");
        // ลงทะเบียน Listener ให้เซ็นเซอร์ใหม่นี้
        sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    public void onDynamicSensorDisconnected(Sensor sensor) {
        Log.d("Sensor", "เซ็นเซอร์ถูกตัดการเชื่อมต่อ: " + sensor.getName());
        // ยกเลิก Listener
        sensorManager.unregisterListener(listener, sensor);
    }
};

// เริ่มฟัง
sensorManager.registerDynamicSensorCallback(callback);

// หยุดฟัง (ใน onDestroy)
sensorManager.unregisterDynamicSensorCallback(callback);

กรณีการใช้งานจริง

  • Health/Fitness Apps: รองรับ Heart rate monitor, Cadence sensor, Power meter ภายนอก
  • IoT Apps: ตรวจจับเซ็นเซอร์อัจฉริยะในบ้าน (Temperature, Humidity, Motion)
  • Wearable Companion Apps: จัดการเซ็นเซอร์บนนาฬิกาอัจฉริยะที่เชื่อมต่อ
  • Industrial Apps: อุปกรณ์วัดพิเศษที่เชื่อมต่อผ่าน USB/Bluetooth

ข้อควรระวัง

  • เพิ่มใน API 24 (Android 7.0 Nougat)
  • อุปกรณ์เก่าหรือราคาถูกอาจไม่รองรับ (คืนค่า false)
  • เซ็นเซอร์ไดนามิกส่วนใหญ่เป็น Composite/Virtual sensors จากอุปกรณ์ภายนอก
  • ต้องจัดการ Lifecycle ให้ถูกต้อง (Register/Unregister ใน onResume/onPause)