我有一个前台服务,显示进度通知,如果完成,通知将重新用作正常通知,以显示服务的结果
如果最终通知是否无声,我允许用户在我的应用内定义。所以这就是我的工作:
// 1) Create notifcation channel in my app, once only
NotificationChannel notificationChannel = new NotificationChannel(channelId, channelName, importance);
notificationChannel.enableLights(false);
notificationChannel.enableVibration(true);
notificationManager.createNotificationChannel(notificationChannel);
// 2) Init notification
notificationBuilder = new NotificationCompat.Builder(this, notificationChannelId);
notificationBuilder.setAutoCancel(false);
notificationBuilder.setOngoing(true);
notificationBuilder.setTicker(ticker);
notificationBuilder.setContentText(title);
// 3) Updating the notification to show the services progress
notificationBuilder.setContentTitle(title);
notificationBuilder.setContentText(subTitle);
// 4) preparing the final notification
if (!MainApp.getPrefs().silentNotifications()) {
if (globalError || updated > 0 || prepared > 0 || contactsWithError.size() > 0) {
notificationBuilder.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE);
notificationBuilder.setVibrate(new long[]{0, 500});
notificationBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
} else {
notificationBuilder.setVibrate(new long[]{});
notificationBuilder.setSound(null);
}
}
问题
我想要什么
我该如何实现这一目标?
编辑 - 以下是一个解决方案:
使用两个频道:
这对我来说很奇怪,我会假设我可以使用一个频道,默认设置声音并使用此频道。如果用户允许我播放声音,我应该能够定义自己播放声音(似乎我现在被迫播放声音)。否则我当然不会播放声音。看起来目前您需要为每项服务提供两个频道,这些频道会显示通知中的进度,并在完成后默认播放声音。向用户解释是不好的,因为你需要两个通道用于同一个动作,一个用于进度,另一个用于最终结果...
答案 0 :(得分:0)
我对通知的声音感到恼火。我这样做了
.setSound(Uri.parse("android.resources://" + getPackageName() + "/" + R.raw.silence))
和这个
.setOnlyAlertOnce(true)
另请注意,您还必须在频道中设置它们。