【问题标题】:Proper different amplitude values for vibration适当的不同振幅值的振动
【发布时间】:2020-12-12 11:24:09
【问题描述】:

我正在开发这个应用程序,我需要提供三种不同的振动强度。这三个强度与一个心形符号相关联。我想要强、中、低的心跳/振动。可能的振幅值(根据文档)为 0-255,其中 0 是无振动,255 是可能的最强振动。现在,我可以为强节拍指定 255。虽然,我不知道为中低心跳分配什么值。我的设备不支持振幅,因为它们很旧。所以,我被困住了。

我想知道是否有人可以给我一些正确的价值观或指导我阅读一篇文章。我尝试搜索但没有任何运气。

谢谢。

【问题讨论】:

    标签: java android


    【解决方案1】:

    我的猜测是您可以生成振动模式(假设您的设备仅支持 (0) 无振动和 (255) 最大振动)。

    首先,您应该在 AndroidManifest.xml 中声明振动权限:

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

    那么你就可以使用这个代码了:

    import android.os.Vibrator;
    Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    long[] vibrationPattern = {0, 100, 500, 300};
    // must support new VibrationEffect API 26
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        v.vibrate(VibrationEffect.createWaveform(vibrationPattern, VibrationEffect.DEFAULT_AMPLITUDE));
    } else {
        //deprecated in API 26 
        v.vibrate(vibrationPattern, -1);
    }
    

    让我们以生成的振动模式为例。 它以 0 开始,表示 0 延迟(以毫秒为单位),然后全速振动 100 毫秒,延迟 500 毫秒,然后再次振动 300 毫秒。您显然可以根据需要创建不同的模式,只要您愿意。在调用这些方法之前,请检查v.hasVibrator(),否则如果某些设备不支持,您的应用可能会崩溃。

    希望能帮到你!

    【讨论】:

    • 感谢您抽出宝贵时间回复我的问题。我实际上并不是在要求旧设备。我想为新的奥利奥设备提供这个功能(但我没有任何值来试验)。我只想要价值观。 255 表示强(我知道),?对于中等,和?为低。这些是我想要的价值观。问候。
    • 请注意不能改变振动的“强度”。它只支持开/关状态。正如我在下面的答案中所建议的那样,您可以通过以毫秒为单位创建具有自定义开/关时间的不同模式来人工模拟不同的振动强度。看看developer.android.com/reference/android/os/Vibrator.html
    • 你好。这个方法和幅度部分请参考:developer.android.com/reference/android/os/…
    • 你可以用 long durationMs = 1000; int 幅度 = 0-255 之间的任何值; VibrationEffect.createOneShot(durationMs, 振幅);但请记住,它仅适用于 API 级别 26 或更高级别。
    【解决方案2】:

    编辑 (添加了一个被视为输出答案的振动)


    将心跳(振动)作为输入。

    根据 Android 开发文档,传感器事件 TYPE_HEART_RATE 为您提供每分钟心跳次数的心率。

    关于心率范围是低、中还是强的决定取决于医疗信息和您的应用的用途。

    例如,如果您愿意在一个人不做任何运动(静息心率)时标记心率,那么您可以检查例如 here 正常心率保持在 60 到 100 之间,您还可以考虑许多其他变量,例如年龄、性别等。

    关于没有实际上可以为您提供传感器测量的设备的编码,您可以尝试使用最后一个 SDK 创建一个 Android Wear Emulator,但我担心他们过去无法模拟心跳,如您所见 @987654323 @。

    无论如何,只需创建一个复制的测试方法(或者更好地重载对传感器事件做出反应的方法)并使用您在代码中预定义的一些心率调用该方法。使用不同的值调用该方法并检查心脏符号是否相应更新。

    然后希望您从传感器正确捕获事件并尽可能在真实设备上进行检查。


    将振动视为输出

    在这种情况下,恐怕您将无法在没有真实设备的情况下测试强度,并且还要记住强度很大程度上取决于设备本身(振动电机强度)。在给定内核类型的情况下,有多种复杂的方法可以尝试控制振动强度(如您可以找到 here),但您似乎不需要任何方法。

    由于振动强度本身显然无法控制,请阅读此question 上的想法。他们建议您在振动模式中使用非振动间隔,以使振动感觉“更弱”。

    在他的代码中,他使用了 15 毫秒的振动间隔 + 15 毫秒的非振动间隔,因此现在将其用作参考,直到您获得真正的反馈并使用以下内容:

    • Strong 持续振动。
    • 15 毫秒的振动 + 15 毫秒无振动间隔的中等。
    • 15 ms + 30 ms 的振动,Low 没有振动间隔。

    然后,当您获得反馈时,只需调整非振动间隙即可。

    对于接受幅度的较新设备,以基于幅度的模式开始,例如:

    • 255*(1/3) 为低。
    • 255*(2/3) 为中等。
    • 255 表示强。

    再一次,当你有反馈时重新调整。

    【讨论】:

    • 感谢您抽出宝贵时间回复我的问题。我不确定你是否理解我的问题。我想要三种不同的设置来表示心跳。例如,一个非常受欢迎的想法会使心形符号变大,并且用户会收到强烈的振动效果。如果这个想法是正常的,他会得到中等振动。如果这个想法不被喜欢,用户会得到一个低振动。我知道最强的是 255。如果没有测试各种振幅值的设备,我无法确定应该分配中低振动的哪个值。这不是医疗应用。
    • True @knowledgeseeker,我以为您在谈论输入节拍(振动),因为您提到了心脏符号,但您在谈论输出振动。
    • 我已经编辑了答案以将振动视为输出@knowledgeseeker
    • 感谢您抽出宝贵时间回复我的问题。我很感激。不过,我实际上指的是 Android Oreo 设备(及更高版本)的幅度值。我不考虑旧设备。在 Android O 及更高版本上,您会获得两个用于创建振动模式的参数。时间和幅度。振幅控制振动的强度。我的问题是我缺少一个 Android O 设备来测试幅度值,看看哪些值适合中等和低。我希望我现在说清楚了。
    • 这里是文档中示例函数的链接:developer.android.com/reference/android/os/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多