Android触摸震动?

17

我正在尝试在触摸屏幕上的对象时使我的设备振动。 我正在使用这段代码:

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

我在清单文件中添加了震动权限,但似乎没有效果。有什么建议吗?此外,我的硬件支持振动。

5个回答

27
根据这个答案,您可以在不请求任何额外权限的情况下执行触觉反馈(振动)。请查看performHapticFeedback方法。
View view = findViewById(...)
view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);

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


我发现这个有点弱,有没有更强的触感震动? - Martin Erlic
太好了!正是我需要的。非常感谢。 - DmitryKanunnikoff
太好了!感谢您避免了额外的权限。 - Serg Burlaka

26

请尝试这个:

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"/>

它运行良好,我认为您在错误的小部件上实现了onTouch方法,请再次检查。因为振动代码没有问题。 - deepak Sharma
这很好,但当用户继续移动手指时,它会持续振动 - 这不是一个良好的用户体验 - 请参见下面的答案,该答案解决了这个问题。 - Mercury

2

当用户触摸视图时,它会振动一次(当用户在视图上滑动手指时不会持续振动!):

@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;
}

正如Ramesh所说,在清单文件中允许权限:

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

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"/>

0

对我有用的 kotlin ext fun

对于触觉效果,vibro有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"/>

祝你好运 ✌ :))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接