Android вибрировать на ощупь? - PullRequest
13 голосов
/ 31 января 2012

Я пытаюсь заставить мое устройство вибрировать, когда я касаюсь объекта на экране. Я использую этот код:

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

с разрешением в файле манифеста, но я не вижу никаких результатов. Какие-либо предложения? Кроме того, мое оборудование поддерживает вибрации.

Ответы [ 4 ]

22 голосов
/ 31 января 2012

пожалуйста, попробуйте это:

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"/>
20 голосов
/ 28 декабря 2013

Согласно этому ответу , вы можете выполнять тактильную обратную связь (вибрировать), не запрашивая никаких дополнительных разрешений. Посмотрите на метод performHapticFeedback.

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

Примечание: я не проверял этот код.

0 голосов
/ 04 апреля 2019

Если кто-то ищет 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 голосов
/ 02 февраля 2017

Это будет вибрировать один раз, когда пользователь коснулся вида (не будет вибрировать, когда пользователь все еще двигает пальцем!):

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