2012-01-31 82 views
10

我試圖讓我的設備在屏幕上觸摸對象時發生振動。我正在使用此代碼:Android觸摸震動?

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

具有清單文件中的權限,但我似乎沒有得到任何結果。 有什麼建議嗎?另外,我的硬件支持振動。

回答

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

它工作正常,我認爲你在錯誤的小部件上實施onTouch方法請再次檢查。因爲他們是沒有問題的振動代碼。 – 2012-01-31 13:59:15

+0

這很好,但是當用戶繼續移動手指時,它會保持振動 - 不是一個很好的用戶體驗 - 請參閱我的答案,下面解決了這個問題我測試了這個 – Mercury 2017-02-02 20:51:24

14

this answer,你可以不要求任何額外的權限執行觸覺反饋(振動)。看performHapticFeedback方法。

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

注意:我還沒有測試過這段代碼。

+3

。有用。 – 2014-09-07 06:46:55

+0

我發現這個有點弱。有沒有更強烈的觸摸振動? – santafebound 2016-09-12 18:08:09

+0

非常好!正是我需要的。非常感謝你。 – DmitryKanunnikoff 2017-08-10 13:26:41

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