Вы должны определить флаг для включения / выключения звука. Это может быть логическое значение, контролируемое вторым переключателем. Затем проверьте состояние этого флага при создании уведомления и решите установить или нет звук.
И, возможно, разделите Notification
от NotificationBuilder
для управления звуком.
1 - Создайте флаг, являющийся атрибутом класса
Switch simpleswitch1;
Switch simpleswitch2;
private Notification notification;
NotificationManager manager;
Notification myNotication;
// Sound disabled by default
boolean enableSound = false;
2 - Управляйте флагом с помощью второго переключателя
simpleswitch2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
enableSound = isChecked;
}
});
3 - Используйте NotificationBuilder
для управления звуком. Замените этот фрагмент кода с первого переключателя
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(Settings.this, CHANNEL_ID);
notificationBuilder.setSmallIcon(R.drawable.notification);
notificationBuilder.setContentTitle("NOTIFICATION TITLE");
notificationBuilder.setContentText("You have a new notification");
notificationBuilder.setChannelId(CHANNEL_ID);
if (enableSound){
notificationBuilder.setSound(android.provider.Settings.System.DEFAULT_NOTIFICATION_URI);
notificationBuilder.setVibrate(new long[]{1000,100});
}
Notification notification = notificationBuilder.build();
Надеюсь, это поможет!
ОБНОВЛЕНИЕ
Я думаю, я знаю, почему он не воспроизводит звук. Я только что создал новый Android Studio Project и скопировал и вставил ваш код, и уведомления запускаются, звук воспроизводится, и я не могу отключить звук (только противоположность). И я предполагаю, что ваша проблема связана с каналом уведомлений . Затем я модифицирую свое приложение, и оно заработало!
Сначала позвольте мне исправить себя. PRIORITY
устарел начиная с уровня API 26 (, который вы используете в соответствии с @TargetApi(Build.VERSION_CODES.O)
), и вместо него следует использовать IMPORTANCE
в NotificationChannel
. Проблема с каналом уведомлений заключается в том, что вы не можете редактировать его после создания (если только вы не удалите свое приложение). Так что если сначала вы используете канал важности low , а затем измените его на канал high , это не даст никакого эффекта.
Так что вам действительно нужно это два канала уведомлений: один со звуком, а другой без звука, а затем выберите соответствующий канал с помощью ранее созданного флага.
Итак, теперь код для первого переключателя будет: Замечание I переставьте его так, чтобы я сначала создал NotificationChannel (для лучшей читаемости)
if (isChecked){
int notifyID = 1;
String CHANNEL_SOUND_ID = "channel SOUND";// The id of the channel.
CharSequence NAME_SOUND = "channel 1";// The user-visible name of the channel.
String CHANNEL_SILENT_ID = "channel SILENT";// The id of the channel.
CharSequence NAME_SILENT = "channel 2";// The user-visible name of the channel.
int importance_sound = NotificationManager.IMPORTANCE_HIGH;
int importance_silent = NotificationManager.IMPORTANCE_LOW;
NotificationChannel mChannel_sound = new NotificationChannel(CHANNEL_SOUND_ID, NAME_SOUND, importance_sound);
NotificationChannel mChannel_silent = new NotificationChannel(CHANNEL_SILENT_ID, NAME_SILENT, importance_silent);
// Crete both notification channels
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.createNotificationChannel(mChannel_sound);
mNotificationManager.createNotificationChannel(mChannel_silent);
Intent intent = new Intent(Settings.this, Visitor.class);
intent.putExtra("yourpackage.notifyId", notifyID);
PendingIntent pIntent = PendingIntent.getActivity(Settings.this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
// Select the correct notification channel
String selectedChannelId;
if (enableSound){
selectedChannelId = CHANNEL_SOUND_ID;
}else{
selectedChannelId = CHANNEL_SILENT_ID;
}
// Create a notification and set the notification channel.
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(Settings.this, selectedChannelId);
notificationBuilder.setSmallIcon(R.drawable.notification);
notificationBuilder.setContentTitle("Title");
notificationBuilder.setContentText("Notification Text");
notificationBuilder.setContentIntent(pIntent);
notificationBuilder.setChannelId(selectedChannelId);
Notification notification = notificationBuilder.build();
// Issue the notification.
mNotificationManager.notify(notifyID , notification);
}