ภาพรวม
ตัวอย่างนี้สาธิตวิธีตรวจสอบว่าอุปกรณ์ Android รองรับเซ็นเซอร์ Heart Rate (TYPE_HEART_BEAT) หรือไม่ เซ็นเซอร์นี้มักพบในนาฬิกาอัจฉริยะ (Smartwatch) หรืออุปกรณ์착용ได้ (Wearables) มากกว่าโทรศัพท์มือถือทั่วไป
ขั้นตอนการสร้างโปรเจกต์
ขั้นตอนที่ 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);
// ตรวจสอบเซ็นเซอร์ Heart Beat
Sensor heartBeatSensor = sensorManager.getDefaultSensor(Sensor.TYPE_HEART_BEAT);
if (heartBeatSensor != null) {
actionEvent.setText("รองรับ Heart Beat Sensor");
String info = String.format(
"Name: %s\nVendor: %s\nVersion: %d\nMax Range: %.2f\nResolution: %.2f\nPower: %.2f mA",
heartBeatSensor.getName(),
heartBeatSensor.getVendor(),
heartBeatSensor.getVersion(),
heartBeatSensor.getMaximumRange(),
heartBeatSensor.getResolution(),
heartBeatSensor.getPower()
);
actionEvent.append("\n\n" + info);
} else {
actionEvent.setText("ไม่รองรับ Heart Beat Sensor\n(มักพบใน Smartwatch/Watch OS)");
}
}
}
ข้อมูลเกี่ยวกับเซ็นเซอร์ Heart Beat
| คุณสมบัติ | รายละเอียด |
|---|---|
| Constant | Sensor.TYPE_HEART_BEAT (API 21+) |
| หน่วย | Beats per minute (BPM) |
| อุปกรณ์ที่มักมี | Smartwatch, Fitness band, Wear OS devices |
| โทรศัพท์มือถือ | นادرةมาก (อาจมีในรุ่นเก่าบางรุ่นที่มีเซ็นเซอร์อัตราการเต้นหัวใจด้านหลัง) |
ความแตกต่าง: Heart Beat vs Heart Rate
- TYPE_HEART_BEAT: รายงานเฉพาะเหตุการณ์การเต้นของหัวใจแต่ละครั้ง (Event-based)
- TYPE_HEART_RATE: รายงานค่า BPM โดยเฉลี่ย (Continuous reading) - เพิ่มใน API 21
ตัวอย่างการอ่านค่า Heart Rate (ขยายจากตัวอย่างนี้)
Sensor heartRateSensor = sensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
if (heartRateSensor != null) {
sensorManager.registerListener(new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
float heartRate = event.values[0]; // BPM
// อัปเดต UI
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
}, heartRateSensor, SensorManager.SENSOR_DELAY_NORMAL);
}
ข้อควรระวัง
- ส่วนใหญ่โทรศัพท์มือถือ ไม่มี เซ็นเซอร์นี้ → ผลลัพธ์จะเป็น "ไม่รองรับ"
- ต้องขอ Permission
android.permission.BODY_SENSORS(Dangerous permission) เพื่ออ่านค่าจริง - สำหรับแอปสุขภาพ ควรใช้ Google Fit API หรือ Health Services แทนการเข้าถึง Sensor โดยตรง
- เซ็นเซอร์ PPG (Photoplethysmography) ใช้แสง LED สีเขียววัดการไหลของเลือด
Manifest Permission
<uses-permission android:name="android.permission.BODY_SENSORS" /> <uses-feature android:name="android.hardware.sensor.heartrate" android:required="false" />