我正在使用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,但我不确定这是否会导致其他版本或设备崩溃。
如果不声明新频道,我该如何避免这种振动?
答案 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;