Как воспроизвести звук уведомления об андроиде
Мне было интересно, как я могу воспроизводить звук уведомления, не проигрывая его по медиа-потоку. Прямо сейчас я могу сделать это через медиаплеер, однако я не хочу, чтобы он играл в качестве медиафайла, я хочу, чтобы он играл как уведомление или оповещение или мелодию звонка. heres пример того, как выглядит мой код прямо сейчас:
MediaPlayer mp = new MediaPlayer();
mp.reset();
mp.setDataSource(notificationsPath+ (String) apptSounds.getSelectedItem());
mp.prepare();
mp.start();
Ответы
Ответ 1
Если кто-то все еще ищет решение этого вопроса, я нашел ответ на Как воспроизвести мелодию звонка/тревоги в Android
try {
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
r.play();
} catch (Exception e) {
e.printStackTrace();
}
Вы можете изменить TYPE_NOTIFICATION на TYPE_ALARM, но вы хотите отслеживать свой рингтон r, чтобы прекратить его воспроизведение... скажем, когда пользователь нажимает кнопку или что-то в этом роде.
Ответ 2
Теперь вы можете сделать это, включив звук при создании уведомления, а не при вызове звука отдельно.
//Define Notification Manager
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
//Define sound URI
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext())
.setSmallIcon(icon)
.setContentTitle(title)
.setContentText(message)
.setSound(soundUri); //This sets the sound to play
//Display notification
notificationManager.notify(0, mBuilder.build());
Ответ 3
Если вы хотите, чтобы звук уведомления по умолчанию воспроизводился, вы можете использовать setDefaults (int) метод NotificationCompat.Builder
class:
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle(getString(R.string.app_name))
.setContentText(someText)
.setDefaults(Notification.DEFAULT_SOUND)
.setAutoCancel(true);
Я считаю, что это самый простой способ выполнить вашу задачу.
Ответ 4
Прошло некоторое время с вашего вопроса, но... Вы пытались установить тип аудиопотока?
mp.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);
Это нужно сделать перед приготовлением.
Ответ 5
Попробуйте следующее:
public void ringtone(){
try {
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
r.play();
} catch (Exception e) {
e.printStackTrace();
}
}
Ответ 6
Вы можете использовать Notification и NotificationManager для отображения требуемого уведомления. Затем вы можете настроить звук, который хотите воспроизвести, с уведомлением.
Ответ 7
У меня был почти такой же вопрос. После некоторых исследований я думаю, что если вы хотите воспроизвести системный "звук уведомления" по умолчанию, вам в значительной степени нужно отобразить уведомление и сказать ему использовать звук по умолчанию. И в некоторых других ответах есть что сказать в качестве аргумента о том, что если вы воспроизводите звук уведомления, вам также следует представить некоторое уведомление.
Тем не менее, небольшая настройка API уведомлений позволяет приблизиться к тому, что вы хотите. Вы можете отобразить пустое уведомление, а затем автоматически удалить его через несколько секунд. Я думаю, что это будет работать для меня; может быть, это будет работать для вас.
Я создал набор удобных методов в com.globalmentor.android.app.Notifications.java
которые позволяют вам создавать звук уведомления следующим образом:
Notifications.notify(this);
Светодиод также будет мигать, и, если у вас есть разрешение на вибрацию, возникнет вибрация. Да, значок уведомления появится в панели уведомлений, но исчезнет через несколько секунд.
В этот момент вы можете понять, что, поскольку уведомление в любом случае исчезнет, у вас также может появиться сообщение с полосой прокрутки в панели уведомлений; Вы можете сделать это так:
Notifications.notify(this, 5000, "This text will go away after five seconds.");
В этом классе есть много других удобных методов. Вы можете загрузить всю библиотеку из ее хранилища Subversion и собрать ее с помощью Maven. Это зависит от библиотеки globalmentor-core, которую также можно собрать и установить с помощью Maven.
Ответ 8
Intent intent = new Intent(this, MembersLocation.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("type",type);
intent.putExtra("sender",sender);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
PendingIntent.FLAG_ONE_SHOT);
String channelId = getString(R.string.default_notification_channel_id);
Uri Emergency_sound_uri=Uri.parse("android.resource://"+getPackageName()+"/raw/emergency_sound");
// Uri Default_Sound_uri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
if(type.equals("emergency"))
{
playSound=Emergency_sound_uri;
}
else
{
playSound= Settings.System.DEFAULT_NOTIFICATION_URI;
}
NotificationCompat.Builder notificationBuilder =
new NotificationCompat.Builder(this, channelId)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle(title)
.setContentText(body)
.setSound(playSound, AudioManager.STREAM_NOTIFICATION)
.setAutoCancel(true)
.setColor(getColor(R.color.dark_red))
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setContentIntent(pendingIntent);
// notificationBuilder.setOngoing(true);//for Android notification swipe delete disabling...
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// Since android Oreo notification channel is needed.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(channelId,
"Channel human readable title",
NotificationManager.IMPORTANCE_HIGH);
AudioAttributes att = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_NOTIFICATION)
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
.build();
channel.setSound(Emergency_sound_uri, att);
if (notificationManager != null) {
notificationManager.createNotificationChannel(channel);
}
}
if (notificationManager != null) {
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}
}
Ответ 9
Я думаю, что понятие "звук уведомления" как-то неверно для Android UI.
Ожидаемое поведение Android заключается в использовании стандартного уведомления для предупреждения пользователя. Если вы воспроизводите звук уведомления без значка строки состояния, вы можете смутить пользователя ( "что это был за звук? Здесь нет значка, может быть, у меня проблемы со слухом?" ).
Как установить звук в уведомлении, например, здесь: Настройка звука для уведомления
Ответ 10
Установить звук на канал уведомлений
Uri alarmUri = Uri.fromFile(new File(<path>));
AudioAttributes attributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ALARM)
.build();
channel.setSound(alarmUri, attributes);