2012-01-31 13 views
10

Estoy tratando de hacer que mi dispositivo vibre cuando toco un objeto en la pantalla. Estoy usando este código:Android Vibrate on touch?

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

con el permiso en el archivo de manifiesto, pero no parece obtener ningún resultado. ¿Alguna sugerencia? Además, mi hardware admite vibrar.

Respuesta

22

favor intente esto:

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

y añade este permiso para Manifest.xml

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

funciona bien, creo que implementas el método onTouch en el widget incorrecto. Comprueba nuevamente. Porque no hay problema con el código de vibración. –

+0

Esto es bueno, pero cuando el usuario continúa moviendo el dedo, seguirá vibrando, no es una buena experiencia para el usuario. Consulte mi respuesta a continuación, que resuelve este – Mercury

14

Según this answer, puede realizar la retroalimentación háptica (vibración) sin pedir ningún permiso adicional. Mire el método performHapticFeedback.

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

Nota: No he probado este código.

+3

Lo probé. Funciona. –

+0

Me parece que este es un poco débil. ¿Hay vibraciones táctiles más fuertes? – santafebound

+0

¡Excelente! Exactamente lo que necesitaba. Muchas gracias. – DmitryKanunnikoff

0

Este vibrará una vez, cuando el usuario toca la vista (no evitará que vibra cuando el usuario todavía se mueve el dedo!):

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

Y como dijo Ramesh, permite el permiso en el manifiesto:

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