Android 8.0的通知振动问题

时间:2017-09-25 10:02:49

标签: android notifications android-8.0-oreo

我创建通知频道以在Android 8.0中显示通知,如下所示

 NotificationChannel uploadChannel = new NotificationChannel(Constants.NOTIFICATION_CHANNEL_UPLOAD_ID,"Uploads", NotificationManager.IMPORTANCE_LOW);
 uploadChannel.enableLights(false);
 uploadChannel.setDescription("Uploads Channel");
 notificationManager.createNotificationChannel(uploadChannel);

每次我显示通知手机振动很多次。 我从通知渠道禁用振动,如下所示

uploadChannel.enableVibration(false);

我创建通知如下

 NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, Constants.NOTIFICATION_CHANNEL_UPLOAD_ID);

但它不起作用电话随着每个通知而振动。

5 个答案:

答案 0 :(得分:16)

除了Ahmadul Hoq's answer确实对我有用之外,我还要补充一点,在进行振动更改之前,您可能需要删除该应用程序并重新安装它。该频道会保留其初始设置,如果该应用被终止,它会保持活动状态-因此,如果您仅构建并运行,则更改可能不会应用。

答案 1 :(得分:15)

这是Android 8通知系统的错误。我使用enableVibrationsetVibrationPattern(null)的不同组合进行了修补,但它不起作用。

只有阻止振动的解决方案是:

mNotificationChannel.setVibrationPattern(new long[]{ 0 });
mNotificationChannel.enableVibration(true);

仅供参考,即使我将振动模式设置为0,但将enableVibration设置为false,它也会振动。

答案 2 :(得分:1)

此功能对我有用。借助它,我可以在完全禁用灯光,振动和声音的地方创建通知通道。

    private void createNotificationChannel() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel serviceChannel = new NotificationChannel(
                    CHANNEL_ID,
                    "Foreground Service Channel",
                    NotificationManager.IMPORTANCE_DEFAULT
            );

            serviceChannel.setVibrationPattern(new long[]{ 0 });
            serviceChannel.enableVibration(true);
            serviceChannel.enableLights(false);
            serviceChannel.setSound(null, null);

            NotificationManager manager = getSystemService(NotificationManager.class);
            manager.createNotificationChannel(serviceChannel);
        }
    }

答案 3 :(得分:0)

我最初使用NotificationManager.IMPORTANCE_DEFAULT,但无法停止振动。使用NotificationManager.IMPORTANCE_LOW可以解决问题。 NotificationManager.IMPORTANCE_MIN也可以;参见此处:https://developer.android.com/training/notify-user/channels#importance

答案 4 :(得分:0)

添加notificationChannel.setVibrationPattern(new long[]{ 0L }); 卸载应用程序或清除应用程序数据。再次运行它将起作用! 原因:channel_id已注册申请。