以编程方式将通知振动强度降低到零

在我的应用程序中,我希望在通知到来时关闭振动.我可以将通知声音静音但不能停止振动.

为了静音通知的声音,我使用了以下代码:

 if (audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION) != value) {
        audioManager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, value, 0);
        Utils.log("Volume Changed to " + value);
    }

请建议如何将通知振动强度更改为零,或建议在通知到达时取消振动的其他方法.

audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION,
        AudioManager.VIBRATE_SETTING_OFF);

setVibrateSetting不起作用,不推荐使用

我可以通过以下方式手动更改三星设备中通知的振动强度:

>转到设置
>转到我的设备选项卡
>点击声音并打开“振动强度”
>选择来电,通知和触觉反馈的振动强度

但是我怎么能以编程方式来做呢?请帮忙.

最佳答案 通常在手机和类似设备中振动工具由
small dis-balanced motor
causes the vibration when its powered on组成.

除开/关外,该电机通常无法控制,因此您可以控制振动持续时间,而不是它的水平.

在这种情况下,您可以使用Pulse-width modulation (PWM)方法(如图所示)来控制振动强度:设置一些周期T(例如1秒)和第一次900毫秒(tv1)设置振动打开和100毫秒(ts1) – 保持振动.超过800毫秒(tv2)设定振动打开和200毫秒(ts2) – 保持振动等,直到振动时间变为0.

《以编程方式将通知振动强度降低到零》

关于在Vibrator类中实现的Android振动器控件.

正如@Rohit J所提出的,你可以使用振动模式(描述here),如:

long[] pattern = {
        0,     // start vibrate immediately
        900,   // vibrate 1 900 ms
        100,   // silence 1 100 ms
        800,   // vibrate 2 800 ms
        200,   // silence 2 200 ms
        700,
        300,
        600,
        400,
        500,
        500,
        400,
        600,
        300,
        700,
        200,
        800,
        100,
        900,
};

并将其添加到通知:

Notification.Builder builder = new Notification.Builder(context);
builder.setContentIntent(contentIntent)
        ...
        .setVibrate(pattern)
        ...;

NB!此外,您可以创建(手动或编程)更复杂的振动控制模式,以实现更平滑的强度变化(例如,不会创建长的固体振动脉冲,但是很多短脉冲并且不会减少振动的持续时间,但是脉冲的数量,如Pulse-density modulation) .

点赞