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

วิธีตรวจสอบว่ามือถือ Android รองรับเซ็นเซอร์ Heart Beat (อัตราการเต้นของหัวใจ) หรือไม่

ภาพรวม

ตัวอย่างนี้สาธิตวิธีตรวจสอบว่าอุปกรณ์ 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

คุณสมบัติรายละเอียด
ConstantSensor.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" />