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

วิธีทำให้อุปกรณ์ Android กระดิ่ง (Vibrate)

ภาพรวม

ใน Android สามารถใช้บริการ Vibrator เพื่อทำให้อุปกรณ์กระดิ่งได้ ตัวอย่างนี้สาธิตวิธีใช้งาน Vibration API รองรับทั้ง API เก่าและใหม่ (Android 8.0+)

ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่

สร้างโปรเจกต์ Android ใหม่ใน Android Studio

ขั้นตอนที่ 2: เพิ่ม Layout XML

ไฟล์ res/layout/activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:id="@+id/parent"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:gravity="center"
    android:background="#33FFFF00"
    android:orientation="vertical">
    <TextView
        android:id="@+id/text"
        android:textSize="18sp"
        android:text="Click here to vibrate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

ขั้นตอนที่ 3: เพิ่มโค้ด Java

ไฟล์ src/MainActivity.java:

package com.example.andy.myapplication;

import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.os.VibrationEffect;
import android.os.Vibrator;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        final LinearLayout parent = findViewById(R.id.parent);
        textView = findViewById(R.id.text);
        
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
                
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    // Android 8.0 (API 26) ขึ้นไป - ใช้ VibrationEffect
                    vibrator.vibrate(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE));
                } else {
                    // Android เก่ากว่า API 26 - ใช้เมธอดเก่า (deprecated)
                    vibrator.vibrate(500);
                }
            }
        });
    }
}

ขั้นตอนที่ 4: เพิ่ม Permission ใน Manifest

ไฟล์ AndroidManifest.xml - ต้องเพิ่ม permission VIBRATE:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.andy.myapplication">
    
    <!-- สำคัญ: ต้องมี permission นี้ มิฉะนั้นจะไม่กระดิ่ง -->
    <uses-permission android:name="android.permission.VIBRATE" />
    
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

การสร้างรูปแบบการกระดิ่งขั้นสูง (API 26+)

ใช้ VibrationEffect สร้างรูปแบบซับซ้อน:

// กระดิ่งแบบรูปแบบ (pattern): รอ 0ms, กระดิ่ง 100ms, รอ 200ms, กระดิ่ง 300ms...
long[] pattern = {0, 100, 200, 300, 400, 500};
// -1 = ไม่ซ้ำ, 0 = ซ้ำจาก index 0, 1 = ซ้ำจาก index 1, etc.
vibrator.vibrate(VibrationEffect.createWaveform(pattern, -1));

// กระดิ่งแบบ Predefined
vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK));
vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_DOUBLE_CLICK));
vibrator.vibrate(VibrationEffect.createPredefined(VibrationEffect.EFFECT_TICK));

ยกเลิกการกระดิ่ง

vibrator.cancel(); // หยุดการกระดิ่งทันที

⚠️ ข้อควรระวัง

  • ต้องเพิ่ม <uses-permission android:name="android.permission.VIBRATE" /> ใน Manifest
  • บางอุปกรณ์อาจไม่มีฮาร์ดแวร์ Vibrator ให้ตรวจสอบด้วย vibrator.hasVibrator()
  • Android 12+ อาจจำกัดการกระดิ่งในพื้นหลัง (background)
  • ไม่ควรกระดิ่งนานเกินไป หรือบ่อยเกินไป เพื่อประหยัดแบตเตอรี่และ UX

วิธีทดสอบ

  1. ติดตั้งแอปบนอุปกรณ์จริง (Emulator มักไม่รองรับ Vibration)
  2. เปิดแอป คลิกข้อความ "Click here to vibrate"
  3. อุปกรณ์จะกระดิ่ง 500ms