Android Vibrate on touch?

时间:2012-01-31 12:38:20

标签: android android-vibration

当我触摸屏幕上的某个对象时,我正试图让我的设备振动。我正在使用此代码:

 Vibrator v = (Vibrator) getSystemService(getApplicationContext().VIBRATOR_SERVICE); 
 v.vibrate(300);    

拥有清单文件中的权限但我似乎没有得到任何结果。  有什么建议?此外,我的硬件支持振动。

5 个答案:

答案 0 :(得分:22)

请试试这个:

Button b = (Button) findViewById(R.id.button1);
    b.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            Vibrator vb = (Vibrator)   getSystemService(Context.VIBRATOR_SERVICE);
            vb.vibrate(100);
            return false;
        }
    });

并将此权限添加到manifest.xml

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

答案 1 :(得分:19)

根据this answer,您可以执行触觉反馈(振动),而无需任何额外的权限。看看performHapticFeedback方法。

View view = findViewById(...)
view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);

注意:我没有测试过这段代码。

答案 2 :(得分:0)

当用户触摸视图时,这将振动一次(当用户仍然移动手指时不会保持振动!):

@Override
public boolean onTouch(View view, MotionEvent event) {

    if(event.getAction() == MotionEvent.ACTION_DOWN) {
        Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
        v.vibrate(VIBRATE_DURATION_MS);
    }
    return true;
}

正如拉梅什所说,允许在清单中允许:

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

答案 3 :(得分:0)

如果有人在寻找kotlin

val vibrator = context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
vibrator.vibrator(durationInMilliSeconds)

,对于Android-O及更高版本,

val vibrationEffect = VibrationEffect.createOneShot(vibrationDuration, vibrationAmplitude)
vibrator.vibrator(vibrationEffect) 

在取消振动的同时,

vibrate.cancel()

您还需要在AndroidManifest.xml

中添加权限
<uses-permission android:name="android.permission.VIBRATE"/>

答案 4 :(得分:0)

为我工作kotlin ext fun

为达到触觉效果,振动需要5毫秒!! (SHORT_HAPTIC_FEEDBACK_DURATION

fun Context.performHapticFeedback() {
    val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        val vibrationEffect = VibrationEffect.createOneShot(HAPTIC_FEEDBACK_DURATION, VibrationEffect.DEFAULT_AMPLITUDE)
        vibrator.vibrate(vibrationEffect)
    } else {
        vibrator.vibrate(TimeUnit.MILLISECONDS.toMillis(SHORT_HAPTIC_FEEDBACK_DURATION))
    }
}

private const val SHORT_HAPTIC_FEEDBACK_DURATION = 5L

用法

addOnItemTouchListener(ItemTouchListener { position, event ->
                if (event.action == MotionEvent.ACTION_DOWN) {
                    context.performHapticFeedback()  
                }  
            })

权限

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

祝你好运✌:))