| 要求權限 |
|---|
| Manifest(AndroidManifest.xml) 裡加上權限要求 |
| <uses-permission android:name= "com.android.launcher.permission.VIBRATE" /> |
| import 會用到的物件類別 |
|---|
|
import android.os.VibratorEffect; import android.os.Vibrator; android.os.Build; |
| 設定相關參數 |
|---|
|
int streng = 100; int min = 4; int streng = VibrationEffect.DEFAULT_AMPLITUDE; |
| 啟動震動功能 |
|
//使用 Context.getSystemService 建立Vibrator物件 Vibrator myVibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); |
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { myVibrator.vibrate(VibrationEffect.createOneShot ( min * 1000, streng)); } else { myVibrator.vibrate(min * 1000, streng); //SDK 較舊的狀況下,執行舊版函式 } |
| 停止震動 |
|---|
|
myVibrator.cancel(); |
Vibrator 類別
| Vibrator |
|---|
| android.os.Vibrator |
| 用以操作裝置震動功能的類別 |
| 官方文件: Vibrator |
vibrate 函式
| Vibrator.vibrate |
|---|
| void vibrate(VibrationEffect vibe) |
|
接收一個 VibrationEffect 物件 執行物件裡設定的震動模式 | 官方文件: vibrate |
VibrationEffect 類別
| VibVibrationEffectator |
|---|
| android.os.VibrationEffect |
| 用來描述震動功能,供 vibrate 物件使用 |
| 官方文件: VibrationEffect |
createOneShot 函式
| VibrationEffect.createOneShot |
|---|
| VibrationEffect createOneShot(long milliseconds, int amplitude) |
| 建立一次性震動的 VibrationEffect 物件 |
| 傳入時間(milliseconds,毫秒), 以及震動強度(amplitude) |
|
震動強度的值必需在 1 ~ 255 或是 DEFAULT_AMPLITUDE(-1) |
| 官方文件: createOneShot |
DEFAULT_AMPLITUDE
| VibrationEffect.DEFAULT_AMPLITUDE |
|---|
| VibrationEffect 定義常數 內容為 -1 (0xffffffff) 指示使用該設備的震動強度預設值 |
| 官方文件: DEFAULT_AMPLITUDE |
停止震動
在設定的時間或次數到了後震動會自動停止
但如果想在之前中斷
可以使用 cancel() 函式
| Vibrator.cancel() | |
|---|---|
| void Vibrator.cancel(); | |
| 官方文件: Vibrator.cancel | |
不需要取回原先開啟震動的 Vibrator Object
所以也可以直接新建立一個 Vibrator 物件
因此也可以寫成:
| ((Vibrator) this.getSystemService(Service.VIBRATOR_SERVICE)).cancel(); |
SDK 版本確保
VibrationEffect 需要在 SDK > android.os.Build.VERSION_CODES.O 的環境執行如果沒加上版本確保的動作,compiler 不會通過
如果只想 compiler 通過的話
只要函式前加上 RequiresApi 即可
|
@RequiresApi(api = Build.VERSION_CODES.O) private void vibrateOneshot{ ... } |
或是在執行前判斷 SDK 版本
|
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { 執行程式 } |
但無法確保使用者的 SDK 版本,建議用以下方式
| 依 SDK 版本決定執行方式 |
|---|
| if (android.os.Build.VERSION.SDK_INT > = Build.VERSION_CODES.O) { 執行新版 } else { 執行舊版 } |
如果覺得 Build.VERSION_CODES.O 太長
也可以改成數字 [ 26 ]( API level 26)
| if (android.os.Build.VERSION.SDK_INT > = 26 ) { ... } |
這裡可以查到版本對應