Как включить тактильную обратную связь при просмотре кнопки

Я хочу добавить тактильную обратную связь к кнопкам моего приложения и программно управлять ими, чтобы показать состояние кнопки (включено и отключено). Настройка тактильной обратной связи по умолчанию работает только при длительном нажатии. Как я могу заставить его работать для простых нажатий кнопок.

И есть ли способ получить тактильную обратную связь для таких событий, как сенсорное движение?


person Kshitij Aggarwal    schedule 09.02.2010    source источник


Ответы (5)


Вот ответ, хотя это может быть не лучшая реализация:

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

Не забывайте, вам также необходимо добавить разрешение «android.permission.VIBRATE» в манифест программы. Вы можете сделать это, добавив в файл «AndroidManifest.xml» следующее:

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

Надеюсь, это поможет.

person RyanM    schedule 31.03.2010
comment
Если вы разместите 'this.getSystemService(VIBRATOR_SERVICE);' внутри onClickListener кнопки, тогда «это» относится к самой кнопке, которая не имеет метода getSystemService. Вместо этого используйте это: 'getApplicationContext().getSystemService(VIBRATOR_SERVICE);' - person Eric Leschinski; 13.04.2012
comment
вы не всегда можете использовать getApplicationContext() внутри onClickListener - person sudocoder; 21.01.2014

ОБНОВЛЕНИЕ ОТ 24 ДЕКАБРЯ 2019 Г.:

В представлении должна быть включена функция Haptic:

  1. Добавьте android:hapticFeedbackEnabled="true" в xml.
  2. Или используйте view.setHapticFeedbackEnabled(true); в коде

    (Цитируется по Ивану Чау)

Тем не менее, еще одна вещь, которую следует принять во внимание, — включить Haptic Setting на виртуальных устройствах. Иногда это раздражает, поэтому у нас есть несколько флагов, которые приходят на помощь (которые каким-то образом игнорируют эти настройки включения):

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

Примером для Майры является запуск тактильной обратной связи с помощью этого кода.

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

И эту строку кода можно легко включить в действие по клику. Хорошая часть этого заключается в том, что вам не нужно устанавливать разрешение в AndroidManifest (мне это не нужно для SdkVersion «7» (2.1 или 2.3 равно 7))

Также обратите внимание, что в моем коде это будет работать, только если пользователь включил тактильную обратную связь как глобальную. См. http://developer.android.com/reference/android/view/HapticFeedbackConstants.html, чтобы использовать его всегда.

person FIG-GHD742    schedule 31.10.2012
comment
Добавьте android:hapticFeedbackEnabled="true" в кнопку xml или используйте btn.setHapticFeedbackEnabled( true ); в коде - person Ivan Chau; 25.10.2015
comment
@IvanChau Я пытался вставить ваш код, но безрезультатно. Это потому, что мне нужно указать кнопку, а не вид? - person MrPickles; 11.06.2018

Представление имеет функцию PerformHapticFeedback, которая должна позволить вам выполнять ее в любое время, например, на слушателе OnClick.

person Cheryl Simon    schedule 09.02.2010
comment
Я добавил следующий код в метод onClick onClickListener, но он не сработал btn_left .performHapticFeedback(HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); Я не совсем уверен, как работает этот флаг - person Kshitij Aggarwal; 10.02.2010
comment
Вы включили тактильную обратную связь? Согласно документации: developer.android.com /intl/fr/reference/android/view/ это необходимо для воспроизведения любой тактильной обратной связи. Я не уверен в этой константе, вы пробовали использовать VIRTUAL_KEY? - person Cheryl Simon; 10.02.2010
comment
HapticFeedbackConstants.VIRTUAL_KEY недоступен. В настоящее время я использую Android 1.5_r2. И да, тактильная обратная связь включена для кнопок в самом XML. Все еще не повезло - person Kshitij Aggarwal; 11.02.2010
comment
У меня не сработало, пока я не добавил второй флаг HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING, как в ответе Хамида Вакилиана ниже. - person npace; 14.02.2019

getWindow().getDecorView().performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);

простой подход, который вы можете использовать в деятельности.

person Hamidreza Vakilian    schedule 21.01.2019

В дополнение к предыдущим ответам убедитесь, что опция «Виброотклик» включена в настройках вашего устройства.

person Hoby    schedule 17.07.2018
comment
Спасибо, мне было интересно, есть ли ссылка на этот параметр? - person hellotli; 10.10.2019