Как играть в android звук уведомления
мне было интересно, как я могу воспроизводить звук уведомления, не воспроизводя его через медиа-поток. Прямо сейчас я могу сделать это через медиаплеер, однако я не хочу, чтобы он играл как медиафайл, я хочу, чтобы он играл как уведомление или предупреждение или мелодию звонка. вот пример того, как мой код выглядит прямо сейчас:
MediaPlayer mp = new MediaPlayer();
mp.reset();
mp.setDataSource(notificationsPath+ (String) apptSounds.getSelectedItem());
mp.prepare();
mp.start();
9 ответов:
Если кто-то еще ищет решение этой проблемы, я нашел ответ на Как играть мелодию/звуковой сигнал в 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, чтобы прекратить его воспроизведение... скажем, когда пользователь нажимает кнопку или что-то.
теперь вы можете сделать это, включив звук при создании уведомления, а не вызывая звук отдельно.
//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());
Если вы хотите, чтобы звук уведомления по умолчанию воспроизводился, то вы можете использовать setDefaults (int) метод
NotificationCompat.Builderкласс: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);Я считаю, что это самый простой способ выполнить свою задачу.
прошло некоторое время с Вашего вопроса, но ... Вы пробовали установить тип аудиопотока?
mp.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);Это должно быть сделано, прежде чем готовить.
попробуйте это:
public void ringtone(){ try { Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification); r.play(); } catch (Exception e) { e.printStackTrace(); } }
можно использовать уведомления и NotificationManager для отображения уведомления, которое вы хотите. Затем вы можете настроить звук, который вы хотите играть с вашего уведомления.
у меня почти такой же вопрос. После некоторых исследований я думаю, что если вы хотите воспроизвести систему по умолчанию "звук уведомления", вам в значительной степени нужно отобразить уведомление и сказать ему использовать звук по умолчанию. И есть что-то, что можно сказать для аргумента в некоторых других ответах, что если вы играете звук уведомления, вы также должны представлять какое-то сообщение уведомления.
тем не менее, немного настройки 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.
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()); } }
Я думаю, что понятие "звук уведомления" в какой-то мере неправильно для пользовательского интерфейса Android.
ожидаемое поведение Android заключается в использовании стандартного уведомления для оповещения пользователя. Если вы воспроизводите звук уведомления без значка строки состояния, вы путаете пользователя ("что это был за звук? здесь нет значка, может быть, у меня проблемы со слухом?").
Как установить звук на уведомление, например, здесь: Настройка звука для уведомления
Comments