ช่วงนี้มีงานสัปดาห์หนังสือจึงไม่ค่อยได้มาเขียนบทความ Android เท่าไหร่นัก แต่เดี๋ยวจะหาว่าหายไปนานเลยมาทำบทความง่ายๆให้เรียนรู้กันก่อน นั่นคือการทำให้มือถือสั่น หรือ Vibrator นั่นเอง
Vibrator จะเป็นการสั่งให้เครื่อง Android สั่น
เรามักจะเจอบ่อยๆตอน Notification เด้งขึ้นมา เรามาลองทำกันดูดีกว่าจะได้ไม่เสียเวลา
แบบที่ 1 สั่งสั่นผ่าน Button
เริ่ม Step แรกกันด้วยการกด Button Start เพื่อเริ่มสั่นและ กดปุ่ม Stop เพื่อหยุดสั่น แต่ก่อนอื่นเพิ่ม User-Permission ของ Vibration ก่อนใน AndroidManifest.xml
[xml]<uses-permission android:name="android.permission.VIBRATE"/>[/xml]AndroidManifest.xml แบบเต็ม ดังนี้
[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>
[/xml]
เริ่มแรกผมสร้างปุ่ม 2 ปุ่ม Start กับ Stop เอาไว้สำหรับสั่งงาน
[xml]
<?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>
[/xml]
มาที่ MainActivity.java ประกาศตัวแปร Vibrator ก่อน
[java]Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);[/java]
ที่ Onclick ของ Start เราจะสั่งให้ vibrator ทำงานด้วยคำสั่ง vibrate(1000) นั่นคือการสั่งให้สั่น 1 วินาที (1000 millisec = 1 second)
[java]
startBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
vibrator.vibrate(1000);
}
});
[/java]
ที่ Onclick ของ Stop เราจะสั่งให้ vibrator ยกเลิกการสั่นก่อนกำหนดได้ด้วยคำสั่ง
[java]
stopBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
vibrator.cancel();
}
});
[/java]
เมื่อเรากด Start เครื่องจะสั่น 1 วินาที แต่ถ้าเรากดปุ่ม Stop ก่อนที่จะครบ 1 วินาทีเครื่องจะหยุดสั่นทันที
แบบที่ 2 สั่นเป็นจังหวะ
เราจะมาทำให้การสั่นมี Pattern กัน โดยจะใส่เป็น long[] เพื่อให้เราใส่รูปแบบได้ ตัวอย่าง
[java]long[] pattern = { 0, 200, 500 , 200 };[/java]
0 คือ เริ่มสั่นทันที
200 คือ สั่น 200 milliseconds
500 คือ หยุดสั่น 500 milliseconds
200 คือ สั่น 200 milliseconds
ส่วนคำสั่งที่จะสั่งให้สั่นจะเปลี่ยนไปเล็กน้อย คือ
[java]vibrator.vibrate(pattern, -1);[/java]
pattern คือรูปแบบการสั่นจากข้างบน
-1 คือ ทำ 1 ครั้งเท่านั้น ใส่เลขเพิ่มไม่ได้นะ เดี๋ยวพัง
แบบที่ 3 สั่นจนกว่าจะกดหยุด
ให้เปลี่ยนคำสั่งก่อนหน้านี้เป็นแบบนี้
[java]vibrator.vibrate(pattern, 0);[/java]
เท่านี้ก็จะสั่นไม่หยุดแล้ว แต่ ระวังด้วย อย่าลืม cancel ตอนปิด activity ด้วย เพราะถึงจะออกจากหน้านี้หรือกด Home มันก็ยังจะสั่นอยู่ ดังนั้น ใน onPause ให้ใส่ vibrator.cancel(); ด้วยทุกครั้ง
แถม!!!
สำหรับคนที่อยากจะดูว่าตอนนี้ Vibrator ทำงานอยู่หรือไม่ให้ใช้คำสั่ง
[java]
if (vibrator.hasVibrator()) {
Log.d("Can Vibrate", "YES");
} else {
Log.d("Can Vibrate", "NO");
}
[/java]
เป็นอย่างไรกันบ้าง ไม่ยากเกินไปใช่ไหมครับ ส่วนใครชอบสั่นแบบจังหวะ 3 ช่าก็จัด Pattern กันตามสะดวกเลยนะครับ
MainActivity.java แบบเต็ม
[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();
}
});
}
}
[/java]
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