2011-11-25

振動吧!Android

Vibrator 在 Android 裡負責振動的功能,有兩種振動方式,一種是簡單的單次振動,另一種是可以自訂節奏的連續振動。

main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
    <Button
        android:id="@+id/vibrate"
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="振動"
      android:onClick="onClick"
      />
    <Button
        android:id="@+id/timeout"
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="節奏"
      android:onClick="onClick"
      />
</LinearLayout>
VibratorActivity
public class VibratorActivity extends Activity {

    private static final String TAG = "VibratorActivity";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    @Override
    protected void onResume() {
        super.onResume();
    }

    public void onClick(View v) {
        Log.d(VibratorActivity.TAG, "onClick...");
        Vibrator vibrator = (Vibrator) this.getSystemService(VIBRATOR_SERVICE);
        if (v.getId() == R.id.vibrate) {
            Log.d(VibratorActivity.TAG, "long vibration");
            // 單次振動
            vibrator.vibrate(5000);
        }
        else if (v.getId() == R.id.timeout) {
            Log.d(VibratorActivity.TAG, "incremental vibration");
            // 連續振動
            vibrator.vibrate(new long[] {
                    1000, 100, 1000, 200, 1000, 300
            }, -1);
        }
    }
}
單次振動與連續振動都是以毫秒計算,連續振動使用一個 long 陣列來表示振動的節奏,陣列裡的 long 依序表示停、抖、停、抖...的時間長度,連續振動的第二個參數很奇怪,文件上說是用來設定重複,但整個就是很怪,這邊用 -1 表示不重複。

最後還要在 AndroidManifest.xml 裡加上以下的權限才行。
<uses-permission android:name="android.permission.VIBRATE"></uses-permission>
當然要安裝到手機才會有振動的效果。

沒有留言:

張貼留言