ตัวอย่างการใช้ Vibrator ใน Android

0

ช่วงนี้มีงานสัปดาห์หนังสือจึงไม่ค่อยได้มาเขียนบทความ Android เท่าไหร่นัก แต่เดี๋ยวจะหาว่าหายไปนานเลยมาทำบทความง่ายๆให้เรียนรู้กันก่อน นั่นคือการทำให้มือถือสั่น หรือ Vibrator นั่นเอง

Vibrator จะเป็นการสั่งให้เครื่อง Android สั่น

เรามักจะเจอบ่อยๆตอน Notification เด้งขึ้นมา เรามาลองทำกันดูดีกว่าจะได้ไม่เสียเวลา

แบบที่ 1 สั่งสั่นผ่าน Button

เริ่ม Step แรกกันด้วยการกด Button Start เพื่อเริ่มสั่นและ กดปุ่ม Stop เพื่อหยุดสั่น แต่ก่อนอื่นเพิ่ม User-Permission ของ Vibration ก่อนใน AndroidManifest.xml

<uses-permission android:name="android.permission.VIBRATE"/>

AndroidManifest.xml แบบเต็ม ดังนี้

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.kamonway.vibrator" >

    <uses-permission android:name="android.permission.VIBRATE"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity android:name=".MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

เริ่มแรกผมสร้างปุ่ม 2 ปุ่ม Start กับ Stop เอาไว้สำหรับสั่งงาน

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/startBtn"
            android:text="Start"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <Button
            android:id="@+id/stopBtn"
            android:text="Stop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    </LinearLayout>

</RelativeLayout>

มาที่ MainActivity.java ประกาศตัวแปร Vibrator ก่อน

Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

ที่ Onclick ของ Start เราจะสั่งให้ vibrator ทำงานด้วยคำสั่ง vibrate(1000) นั่นคือการสั่งให้สั่น 1 วินาที (1000 millisec = 1 second)

startBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                vibrator.vibrate(1000);
            }
        });

ที่ Onclick ของ Stop เราจะสั่งให้ vibrator ยกเลิกการสั่นก่อนกำหนดได้ด้วยคำสั่ง

stopBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                vibrator.cancel();
            }
        });

เมื่อเรากด Start เครื่องจะสั่น 1 วินาที แต่ถ้าเรากดปุ่ม Stop ก่อนที่จะครบ 1 วินาทีเครื่องจะหยุดสั่นทันที

แบบที่ 2 สั่นเป็นจังหวะ

เราจะมาทำให้การสั่นมี Pattern กัน โดยจะใส่เป็น long[] เพื่อให้เราใส่รูปแบบได้ ตัวอย่าง

long[] pattern = { 0, 200, 500 , 200 };

0 คือ เริ่มสั่นทันที
200 คือ สั่น 200 milliseconds
500 คือ หยุดสั่น 500 milliseconds
200 คือ สั่น 200 milliseconds
ส่วนคำสั่งที่จะสั่งให้สั่นจะเปลี่ยนไปเล็กน้อย คือ

vibrator.vibrate(pattern, -1);

pattern คือรูปแบบการสั่นจากข้างบน
-1 คือ ทำ 1 ครั้งเท่านั้น ใส่เลขเพิ่มไม่ได้นะ เดี๋ยวพัง

แบบที่ 3 สั่นจนกว่าจะกดหยุด

ให้เปลี่ยนคำสั่งก่อนหน้านี้เป็นแบบนี้

vibrator.vibrate(pattern, 0);

เท่านี้ก็จะสั่นไม่หยุดแล้ว แต่ ระวังด้วย อย่าลืม cancel ตอนปิด activity ด้วย เพราะถึงจะออกจากหน้านี้หรือกด Home มันก็ยังจะสั่นอยู่ ดังนั้น ใน onPause ให้ใส่ vibrator.cancel(); ด้วยทุกครั้ง

แถม!!!

สำหรับคนที่อยากจะดูว่าตอนนี้ Vibrator ทำงานอยู่หรือไม่ให้ใช้คำสั่ง

if (vibrator.hasVibrator()) {
            Log.d("Can Vibrate", "YES");
        } else {
            Log.d("Can Vibrate", "NO");
        }

เป็นอย่างไรกันบ้าง ไม่ยากเกินไปใช่ไหมครับ ส่วนใครชอบสั่นแบบจังหวะ 3 ช่าก็จัด Pattern กันตามสะดวกเลยนะครับ
MainActivity.java แบบเต็ม

public class MainActivity extends AppCompatActivity {

    Button startBtn, stopBtn;
    Vibrator vibrator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        startBtn = (Button) findViewById(R.id.startBtn);
        stopBtn = (Button) findViewById(R.id.stopBtn);

        vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

        startBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                vibrator.vibrate(1000);
            }
        });

        stopBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                vibrator.cancel();
            }
        });

    }
}

Reference
http://android.konreu.com/developer-how-to/vibration-examples-for-android-phone-development/
http://stackoverflow.com/questions/13950338/how-to-make-an-android-device-vibrate

Facebook Comments
Share.

About Author

Comments are closed.