ภาพรวม
ตัวอย่างนี้สาธิตวิธีตรวจสอบว่าอุปกรณ์ 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.DynamicSensorCallback | Callback เมื่อเซ็นเซอร์ถูกเพิ่ม/ลบ |
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)