Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to enable haptic feedback on button view

I want to add haptic feedback to my application's buttons and control them programmatically to show button state (enabled and disabled). The default haptic feedback setter works only for long press. How can i make it work for simple button clicks.

And is there a way to have haptic feedback on events like touch move?

like image 955
Kshitij Aggarwal Avatar asked Feb 09 '10 09:02

Kshitij Aggarwal


People also ask

What is haptic feedback on keypad?

Haptic feedback is a type of touch communication – usually in the form of a vibration pattern. Most users who are familiar with this will recognize it either from a vibration of their smartphone when you press a key on the keyboard, or from a controller when you press a button.

What are haptic buttons?

Speaking of tactile keys, haptics can replicate the sensation of physical button presses all throughout Android. When unlocking your phone with the fingerprint reader, chances are you feel a tiny bump right before you see the home screen.


2 Answers

UPDATE ON DECEMBER 24TH 2019:

The view must be enabled Haptic function by:

  1. Add android:hapticFeedbackEnabled="true" in xml.
  2. Or use view.setHapticFeedbackEnabled(true); in code

    (Cited from Ivan Chau)

However, one more thing to take into consideration is to enable Haptic Setting in virtual devices. This is annoying sometimes, so we have some flags come to help (which will ignore these enable Setting somehow):

view.performHapticFeedback(     HapticFeedbackConstants.VIRTUAL_KEY,      HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING  // Ignore device's setting. Otherwise, you can use FLAG_IGNORE_VIEW_SETTING to ignore view's setting. ); 

An example to Mayra is, for run the Haptic Feedback is by using this code.

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

And this line of code can easy be include in you onclick action. The good part with this is you do not need to set a permission in the AndroidManifest (I do not need this on SdkVersion "7" (2.1 or 2.3 is 7 ))

Also note, in my code here, this will only be running if the user has enabled Haptic Feedback as global. See http://developer.android.com/reference/android/view/HapticFeedbackConstants.html for alway use it.

like image 76
FIG-GHD742 Avatar answered Oct 14 '22 23:10

FIG-GHD742


Here is an answer, though it might not be the best implementation:

import android.view.View; import android.os.Vibrator;  public class Main extends Activity implements OnClickListener {     private View myView;     private Vibrator myVib;      @Override     protected void onCreate(Bundle savedInstanceState)     {         super.onCreate(savedInstanceState);         myVib = (Vibrator) this.getSystemService(VIBRATOR_SERVICE);          //myView can be any type of view, button, etc.         myView = (View) this.findViewById(R.id.myView);         myView.setOnClickListener(this);     }      @Override     public void onClick(View v)     {         myVib.vibrate(50);         //add whatever you want after this     } } 

Don't forget, you also need to add the "android.permission.VIBRATE" permission to the program's manifest. You can do so by adding the following to the "AndroidManifest.xml" file:

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

I hope that helps.

like image 31
RyanM Avatar answered Oct 14 '22 21:10

RyanM