TL;DR:
Буду признателен за любую дополнительную информацию об Android
абстрактный класс Vibrator vs performHapticFeedback
Желательно избегать использования Vibrator class
и отдавать приоритет performHapticFeedback
, чтобы не запрашивать у пользователя разрешения, и полагаться только на предпочтения их системы.
Сценарий:
Я работаю с Xamarin, пытаясь реализовать Haptic Feedback для Android и iOS.
Теперь, хотя в документации iOS есть краткое объяснение, которое я реализовал как следующий:
void Platform.Vibrate(HapticsIntensity HapticsIntensity)
{
UIKit.UIImpactFeedbackGenerator ImpactFeedbackGenerator;
switch (HapticsIntensity)
{
case HapticsIntensity.Light:
ImpactFeedbackGenerator = new UIKit.UIImpactFeedbackGenerator(UIKit.UIImpactFeedbackStyle.Light);
break;
case HapticsIntensity.Medium:
ImpactFeedbackGenerator = new UIKit.UIImpactFeedbackGenerator(UIKit.UIImpactFeedbackStyle.Medium);
break;
case HapticsIntensity.Heavy:
ImpactFeedbackGenerator = new UIKit.UIImpactFeedbackGenerator(UIKit.UIImpactFeedbackStyle.Heavy);
break;
default:
ImpactFeedbackGenerator = null;
break;
};
if (ImpactFeedbackGenerator != null)
{
ImpactFeedbackGenerator.Prepare();
ImpactFeedbackGenerator.ImpactOccurred();
}
}
В документации Android для Haptic Feedback указано, что метод performHapticFeedback ожидает HapticFeedbackConstant в качестве параметра.
public boolean performHapticFeedback (int feedbackConstant)
Доступные feedbackConstant находятся здесь , но, похоже, между ними нет никакой разницы.
Вызов:
Длительное нажатие
Engine.AndroidActivity.Window.DecorView.PerformHapticFeedback(Android.Views.FeedbackConstants.LongPress);
имеет тот же эффект, что и VirtualKey
Engine.AndroidActivity.Window.DecorView.PerformHapticFeedback(Android.Views.FeedbackConstants.VirtualKey);
или нажатие клавиатуры
Engine.AndroidActivity.Window.DecorView.PerformHapticFeedback(Android.Views.FeedbackConstants.KeyboardTap);
кроме того, некоторые из FeedbackConstants даже не приводят к тактильной обратной связи.
Кто-нибудь знает, где я могу найти дополнительную документацию по этому вопросу?
Причина, по которой я спрашиваю, заключается в том, что я реализую абстрактный слой поверх Xamarin с помощью Invention где мое намерение состоит в том, чтобы вызвать мой метод, например:
Vibrate(HapticsIntensity.Light);
Vibrate(HapticsIntensity.Medium);
Vibrate(HapticsIntensity.Heavy);
Сегодня это работает, но если на iOS я получаю тактильную обратную связь в виде легкой, средней и сильной вибрации, то на Android я не могу различить их.
Я знаю, что в Android есть класс Vibrate
(см. здесь), который позволяет для детального контроля; однако, чтобы использовать это, мне нужно добавить в свой манифест или запросить определенные разрешения для моего приложения (android.permission.VIBRATE
), и это не оптимально.
Кроме того, если я добавлю разрешение android.permission.VIBRATE
в свой манифест, похоже (если в настройках устройства включена тактильная обратная связь), мне даже не нужно добавлять вызов метода Vibrate()
к моим кнопкам` onClick
; и они уже обеспечат тактильную обратную связь (BZZZTT!!1!).