[英]Disable notification sound on Android O
我尝试在下面的方法中摆脱通知声音。
我能够将它减少到只关闭一次,但它应该在 Android O和更低版本中完全静音。
我在 stackoverflow 和 google 上搜索了很长时间,但直到现在都没有完全奏效。
任何帮助表示赞赏。
public void showUpdateProgressNotification(int id, String appName, int progress, String status, long downloadStart) {
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
String NOTIFICATION_CHANNEL_ID = "my_channel_id_01";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = new NotificationChannel
(NOTIFICATION_CHANNEL_ID, "Test Notifications", NotificationManager.IMPORTANCE_LOW);
notificationChannel.setSound(null, null);
// Configure the notification channel.
notificationChannel.setDescription("Channel test");
notificationManager.createNotificationChannel(notificationChannel);
}
Intent cancelIntent = new Intent(ACTION_FILE_CANCEL);
cancelIntent.putExtra("id", id);
PendingIntent cancel = PendingIntent.getBroadcast(this, ACTION_FILE_CANCEL.hashCode() + id,
cancelIntent, PendingIntent.FLAG_CANCEL_CURRENT);
NotificationCompat.Builder notification = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
.setContentTitle(appName)
.setContentText(status)
.setSmallIcon(android.R.drawable.stat_sys_download)
.setDefaults(0)
.setLargeIcon(BitmapFactory.decodeResource(MyApplication_.getInstance().getResources(), R.mipmap.ic_launcher))
.setProgress(100, progress, progress == 0)
.setWhen(downloadStart)
.setContentIntent(cancel)
.setGroup(GROUP_KEY)
.addAction(R.drawable.ic_close_black_24dp, "Cancel", cancel)
.setColor(MyApplication_.getInstance().getResources().getColor(R.color.apps_color))
.setOnlyAlertOnce(true);
NotificationCompat.InboxStyle inboxStyle =
new NotificationCompat.InboxStyle();
inboxStyle.addLine(status);
notification.setStyle(inboxStyle);
notificationManager.notify(id, notification.build());
addNotification(id);
}
经过更多的研究,我想通了。
这是至关重要的部分:
//Configure the notification channel, NO SOUND
notificationChannel.setDescription("no sound");
notificationChannel.setSound(null,null); <---- ignore sound
notificationChannel.enableLights(false);
notificationChannel.setLightColor(Color.BLUE);
notificationChannel.enableVibration(false);
起初在实现这一点时,它仍然无法正常工作,但在卸载我的应用程序并重新安装后一切正常。
如果有人需要它,这是正确的代码:
public void showUpdateProgressNotification(int id, String appName, int progress, String status, long downloadStart) {
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
String NOTIFICATION_CHANNEL_ID = "my_channel_id_01";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = new NotificationChannel(
NOTIFICATION_CHANNEL_ID, "My app no sound", NotificationManager.IMPORTANCE_LOW
);
//Configure the notification channel, NO SOUND
notificationChannel.setDescription("no sound");
notificationChannel.setSound(null,null);
notificationChannel.enableLights(false);
notificationChannel.setLightColor(Color.BLUE);
notificationChannel.enableVibration(false);
notificationManager.createNotificationChannel(notificationChannel);
}
Intent cancelIntent = new Intent(ACTION_FILE_CANCEL);
cancelIntent.putExtra("id", id);
PendingIntent cancel = PendingIntent.getBroadcast(this, ACTION_FILE_CANCEL.hashCode() + id,
cancelIntent, PendingIntent.FLAG_CANCEL_CURRENT);
NotificationCompat.Builder notification = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
.setContentTitle(appName)
.setContentText(status)
.setSmallIcon(android.R.drawable.stat_sys_download)
.setDefaults(0)
.setLargeIcon(BitmapFactory.decodeResource(MyApplication_.getInstance().getResources(), R.mipmap.ic_launcher))
.setProgress(100, progress, progress == 0)
.setWhen(downloadStart)
.setContentIntent(cancel)
.setGroup(GROUP_KEY)
.addAction(R.drawable.ic_close_black_24dp, "Cancel", cancel)
.setColor(MyApplication_.getInstance().getResources().getColor(R.color.apps_color));
NotificationCompat.InboxStyle inboxStyle =
new NotificationCompat.InboxStyle();
inboxStyle.addLine(status);
notification.setStyle(inboxStyle);
notificationManager.notify(id, notification.build());
addNotification(id);
}
无论频道设置如何,您都可以使用以下方法确保个别通知不发出声音:
NotificationCompat.Builder.setSilent(true)
无论通知渠道设置如何,这都有效。 这允许您拥有一个默认发出声音的频道,但允许您根据需要发布静音通知,而无需使整个频道静音。
参考: https : //developer.android.com/reference/androidx/core/app/NotificationCompat.Builder#setSilent(boolean)
只需添加
NotificationCompat.Builder.setNotificationSilent()
这适用于所有 Android 版本,在所有情况下,即使您设置了 PRIORITY_HIGH
确保卸载应用程序并重新安装
示例:
val builder = NotificationCompat.Builder(this, CHANNEL_ID)
.setContentText("text")
.setContentTitle("content")
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setNotificationSilent() // just keep this line
.setSmallIcon(R.drawable.logo)
.setTicker("text"))
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
builder.setChannelId(CHANNEL_ID)
}
一个更简单的方法是给你的通知渠道低优先级:
val chan = NotificationChannel(
channelId,
channelName, NotificationManager.IMPORTANCE_LOW
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.