Service.startForeground振动设备

时间:2018-02-07 18:08:19

标签: java android kotlin android-notifications

我正在使用startForeground()来自我的某项服务:

NotificationCompat.Builder notifBuilder = 
                              new NotificationCompat.Builder(this, "my_channel")
                              .setContentTitle("Loading");
startForeground(1, notifBuilder.build());

问题在于,因为我使用我的唯一通道进行通知而且它有振动:

NotificationManager notificationManager =
      (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationChannel mChannel = 
        new NotificationChannel("my_channel", "Notifications", NotificationManager.IMPORTANCE_DEFAUL);
mChannel.enableLights(true);
mChannel.enableVibration(true);
notificationManager.createNotificationChannel(mChannel);

startForeground()电话会产生振动。

尝试了一些配置:

无效:notifBuilder.setVibrate(new long[]{0,0})notifBuilder.setDefaults(~Notification.DEFAULT_VIBRATE)

使用我的设备notifBuilder.setVibrate(null)或使用未注册的频道ID,但我不确定这是否会导致其他版本或设备崩溃。

如果不声明新频道,我该如何避免这种振动?

2 个答案:

答案 0 :(得分:3)

您正在使用longblob创建NotificationChannel文档说明:

  

默认通知重要性:在任何地方显示,产生噪音,但不会在视觉上干扰。

您可能需要IMPORTANCE_DEFAULT

  

低通知重要性:无处不在,但不会打扰。

如果您希望IMPORTANCE_LOW留下"my_channel",则可以为此服务创建一个具有不同重要性的新频道。

答案 1 :(得分:1)

振动模式特定于该通知频道,因此您在发布通知时必须在通知频道上禁用它,然后重新启用它以获取您想要振动的通知。您还可以为不同的优先级设置单独的通知渠道,如文档中所示:

When you target Android 8.0 (API level 26), you must implement one or more notification channels to display notifications to your users.

因此,即使您使用了setVibrate(null)或其他一些变体,它也只会在26+上被忽略,因为该方法已被弃用,现在将使用NotificationChannel的模式:

/**
 * The pattern with which to vibrate.
 *
 * <p>
 * To vibrate the default pattern, see {@link #defaults}.
 * </p>
 *
 * @see android.os.Vibrator#vibrate(long[],int)
 * @deprecated use {@link NotificationChannel#getVibrationPattern()}.
 */
@Deprecated
public long[] vibrate;