我正在尝试设置一个抬头通知,该通知会持续30秒并在显示时发生振动。但是,取消或让通知超时时,振动并不能阻止某些设备上的振动。
它不适用于运行Android 9的Pixel 3。 它可以在运行Android 9的OnePlus 6或运行Android 10 Beta的Pixel上使用。
在启动和取消尝试时,我尝试使用相同的上下文来生成NotificationManagerCompat。 我尝试取消与我的应用程序相关的所有通知,而不是取消我实际上要取消的通知。 我尝试启动广播并启动接收器,这又取消了通知。
这是我正在使用的通知渠道:
AudioAttributes audioAttr =
new AudioAttributes.Builder().setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
.build();
NotificationManager notificationManager = context.getSystemService(NotificationManager.class);
if (notificationManager != null) {
NotificationChannel channel = new NotificationChannel("channelId",
"channelName",
NotificationManager.IMPORTANCE_HIGH);
channel.setDescription("Channel description");
channel.setVibrationPattern({0L, 2000L, 2000L});
channel.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE), audioAttr);
channel.enableVibration(true);
channel.setLockscreenVisibility(VISIBILITY_PUBLIC);
channel.setShowBadge(false);
notificationManager.createNotificationChannel(ch);
这是启动的通知:
Notification incCall = new NotificationCompat.Builder(context,
"someChannelId").setSmallIcon(R.drawable.someDrawable)
.setContentText("Some text")
.setContentTitle("Some title")
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setCategory(NotificationCompat.CATEGORY_CALL)
.setDefaults(Notification.DEFAULT_ALL)
.setAutoCancel(true)
.setFullScreenIntent(intent, true)
.setTimeoutAfter(30 * 1000)
.build();
incCall.flags = Notification.FLAG_INSISTENT;
NotificationManagerCompat.from(context)
.notify(”some id”, incCall);
这是我尝试取消通知的方式:
NotificationManagerCompat.from(context).cancel("someChannelId");
我也尝试过:
NotificationManagerCompat.from(context).cancelAll();
我希望手机在隐藏通知后会停止振动。但是,即使在调用cancel时通知被隐藏,振动仍会继续。
答案 0 :(得分:0)
看看Google自己编写的代码,频道和通知的配置有些不同:
删除行:
incCall.flags = Notification.FLAG_INSISTENT
导致隐藏通知时振动停止。但是,它的确使它停止在其他型号上运行,例如运行Android 10 Beta的Pixel。因此,我完全适应了链接中使用的解决方案。通知的构建如下:
Notification incCall = new NotificationCompat.Builder(context,
"id")
.setPriority(NotificationCompat.PRIORITY_MAX)
.setCategory(NotificationCompat.CATEGORY_CALL)
.setSmallIcon(R.drawable.someDrawable)
.setContentTitle("title")
.setContentText("content")
.setAutoCancel(true)
.setOngoing(true)
.setTimeoutAfter(30*1000)
.setFullScreenIntent(intent, true)
.build();
此通知渠道的构建方式如下:
NotificationChannel channel = new NotificationChannel("id",
"name",
NotificationManager.IMPORTANCE_HIGH);
channel.setDescription("Description");
AudioAttributes audioAttributes =
new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
.build();
channel.setSound(aRingtoneUri, audioAttributes);
channel.setLockscreenVisibility(VISIBILITY_PUBLIC);
channel.setShowBadge(false);
channel.enableVibration(true);
notificationManager.createNotificationChannel(channel);
这为我解决了这个问题。