Gus*_*Gus 5 c# android xamarin haptic-feedback
长话短说:
如果有关于 Android 的任何额外信息,我们将不胜感激
抽象类 Vibrator 与 PerformHapticFeedback
最好避免使用Vibrator class并优先performHapticFeedback避免必须询问用户的权限,并且仅依赖于他们的系统的偏好。
设想:
我正在与 Xamarin 合作,尝试为 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();
}
}
Run Code Online (Sandbox Code Playgroud)
Android触觉反馈文档指出, performHapticFeedback方法需要HapticFeedbackConstant作为参数。
public boolean performHapticFeedback (int feedbackConstant)
Run Code Online (Sandbox Code Playgroud)
可用的反馈常量在这里,但它们之间似乎没有区别。
呼叫:
长按
Engine.AndroidActivity.Window.DecorView.PerformHapticFeedback(Android.Views.FeedbackConstants.LongPress);
Run Code Online (Sandbox Code Playgroud)
与VirtualKey效果相同
Engine.AndroidActivity.Window.DecorView.PerformHapticFeedback(Android.Views.FeedbackConstants.VirtualKey);
Run Code Online (Sandbox Code Playgroud)
或 键盘点击
Engine.AndroidActivity.Window.DecorView.PerformHapticFeedback(Android.Views.FeedbackConstants.KeyboardTap);
Run Code Online (Sandbox Code Playgroud)
此外,一些反馈常数甚至不会产生触觉反馈。
我问的原因是我正在使用Invention在 Xamarin 上实现一个抽象层,我的目的是让我的方法调用如下:
Vibrate(HapticsIntensity.Light);
Run Code Online (Sandbox Code Playgroud)
Vibrate(HapticsIntensity.Medium);
Run Code Online (Sandbox Code Playgroud)
Vibrate(HapticsIntensity.Heavy);
Run Code Online (Sandbox Code Playgroud)
这在今天是可行的,但在 iOS 上我得到了轻、中、重振动的触觉反馈,在 Android 上我无法区分它们。
现在,我知道 Android 有一个Vibrate类(请参阅此处),它允许进行精细控制;但是,要使用此功能,我需要添加到我的清单或请求我的应用程序的特定权限 ( android.permission.VIBRATE),这不是最佳选择。
另外,如果我将android.permission.VIBRATE权限添加到我的清单中,似乎(如果设备在其设置中启用了触觉反馈),我什至不需要将方法Vibrate()调用添加到我的按钮中onClick;他们已经提供了触觉反馈(BZZZTT!!1!)。
这完全取决于设备 OEM 是否更改了 ASOP 代码和com.android.internal.R.array资源中的振动计时阵列,以启用他们在设备上使用的特殊触觉反馈“引擎”。
默认情况下,硬件 OEM 仅需要(在硬件中)支持标准开/关振动(线性致动器、加权旋转等),而不是通常基于波形的“真正”触觉反馈。
与较新的 iOS 设备(7|8+?)相比,它们使用“Taptic Engine”(花哨的说法是“高级线性执行器”)进行触觉反馈,直到最近 Android 设备才在硬件上“赶上”侧面(新的 OnePlus、Pixel 3s 等...)开始包含更先进的触觉/振动硬件(无论 OEM 是否对该新硬件做了任何特殊处理,您决定...)
因此,如果您查看 ASOP,PhoneWindowManager.java您会发现大部分都HapticFeedbackConstants集中在几个VibrationEffects常量中,例如:
~~~
VibrationEffect.EFFECT_TICK
VibrationEffect.EFFECT_CLICK
VibrationEffect.EFFECT_HEAVY_CLICK
~~~
Run Code Online (Sandbox Code Playgroud)
VibrationEffects如果您想了解特定的ASOP 默认值,请查看源代码HapticFeedbackConstants:
如果由于某种原因您必须为您的应用程序提供基于手动的触觉,您可以使用 Vibrator API 并为您的开/关计时提供字节数组,然后为电话设备提供特殊情况,以提供更多硬件功能。
| 归档时间: |
|
| 查看次数: |
3597 次 |
| 最近记录: |