2012-01-31 2 views
10

화면의 객체를 터치 할 때 장치를 진동으로 만들려고합니다. 나는이 코드를 사용하고 있습니다 :Android 터치에서 진동이 발생합니까?

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

매니페스트 파일의 권한을하지만 난 어떤 결과를 얻을하지 않는 것. 제안 사항이 있으십니까? 또한 제 하드웨어가 진동을 지원합니다.

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

답변

22

이 시도하시기 바랍니다. performHapticFeedback 방법을보십시오.

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

참고 :이 코드는 테스트하지 않았습니다.

+0

그것은 잘 작동합니다 당신이 잘못 위젯에 onTouch 메서드를 구현하는 것 같아 다시 확인하시기 바랍니다. 왜냐하면 그들의 진동 코드에 아무 문제가 없기 때문입니다. –

+0

이것은 좋은 일이지만 사용자가 손가락을 계속 움직이면 좋은 사용자 경험이 아닌 진동이 계속됩니다.이 문제를 해결 한 아래의 대답을 참조하십시오. – Mercury

14

this answer에 따르면, 당신은 여분의 권한을 요구하지 않고 햅틱 피드백 (진동)을 수행 할 수 있습니다 manifest.xml이 권한을

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

을 추가합니다 :

+3

테스트를 마쳤습니다. 그것은 작동합니다. –

+0

나는 이것이 약한 것을 발견했다. 더 강한 접촉 진동이 있습니까? – santafebound

+0

우수! 정확히 내가 필요로하는 것. 고맙습니다. – DmitryKanunnikoff

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"/> 
관련 문제