2012-01-31 15 views
10

Sto provando a far vibrare il mio dispositivo quando tocco un oggetto sullo schermo. Sto usando questo codice:Android Vibrazione al tocco?

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

con il permesso nel file manifest ma non sembra ottenere alcun risultato. Qualche suggerimento? Inoltre, il mio hardware supporta la vibrazione.

risposta

22

si prega di provare questo:

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

e aggiungere questa autorizzazione per manifest.xml

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

funziona benissimo. Penso che tu applichi il metodo onTouch su un widget sbagliato, per favore controlla di nuovo. Perché il loro non è un problema con il codice di vibrazione. –

+0

Questo è bello, ma quando l'utente continua a muovere il dito, continuerà a vibrare - non è una buona esperienza utente - Vedi la mia risposta qui sotto che risolve questo – Mercury

14

Secondo this answer, è possibile eseguire un feedback tattile (vibrazione) senza chiedere alcuna autorizzazione in più. Guarda il metodo performHapticFeedback.

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

Nota: non ho testato questo codice.

+3

l'ho provato. Funziona. –

+0

Trovo che questo sia un po 'debole. Ci sono vibrazioni di tocco più forti? – santafebound

+0

Eccellente! Esattamente quello di cui avevo bisogno. Grazie mille. – DmitryKanunnikoff

0

Questo vibra una volta, quando l'utente ha toccato vista (non mancherà di tenere a vibrazione quando l'utente si muove ancora il dito!):

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

E come ha detto Ramesh, consentono l'autorizzazione a manifestare:

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