Ответ 1
Что не было в моем предыдущем коде:
Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
builder.setSound(alarmSound);
Я использовал новый конструктор NotificationCompat, и я не могу получить уведомление, чтобы сделать звук. Он будет вибрировать и мигать светом. В документации по Android содержится установка стиля, который я сделал с помощью:
builder.setStyle(new NotificationCompat.InboxStyle());
Но нет звука?
Полный код:
NotificationCompat.Builder builder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("Notifications Example")
.setContentText("This is a test notification");
Intent notificationIntent = new Intent(this, MenuScreen.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(contentIntent);
builder.setAutoCancel(true);
builder.setLights(Color.BLUE, 500, 500);
long[] pattern = {500,500,500,500,500,500,500,500,500};
builder.setVibrate(pattern);
builder.setStyle(new NotificationCompat.InboxStyle());
// Add as notification
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(1, builder.build());
Что не было в моем предыдущем коде:
Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
builder.setSound(alarmSound);
Просто поместите свой звуковой файл в папку Res\raw\siren.mp3
, затем используйте этот код:
Для пользовательского звука:
Notification notification = builder.build();
notification.sound = Uri.parse("android.resource://"
+ context.getPackageName() + "/" + R.raw.siren);
Для звука по умолчанию:
notification.defaults |= Notification.DEFAULT_SOUND;
Для пользовательской вибрации:
long[] vibrate = { 0, 100, 200, 300 };
notification.vibrate = vibrate;
Для вибрации по умолчанию:
notification.defaults |= Notification.DEFAULT_VIBRATE;
Другой способ для звука по умолчанию
builder.setDefaults(Notification.DEFAULT_SOUND);
ИСПОЛЬЗОВАНИЕ Can Codeding
String en_alert, th_alert, en_title, th_title, id;
int noti_all, noti_1, noti_2, noti_3, noti_4 = 0, Langage;
class method
Intent intent = new Intent(context, ReserveStatusActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
intent = new Intent(String.valueOf(PushActivity.class));
intent.putExtra("message", MESSAGE);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addParentStack(PushActivity.class);
stackBuilder.addNextIntent(intent);
// PendingIntent pendingIntent =
stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
// android.support.v4.app.NotificationCompat.BigTextStyle bigStyle = new NotificationCompat.BigTextStyle();
// bigStyle.bigText((CharSequence) context);
notification = new NotificationCompat.Builder(context)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(th_title)
.setContentText(th_alert)
.setAutoCancel(true)
// .setStyle(new Notification.BigTextStyle().bigText(th_alert) ตัวเก่า
//
.setStyle(new NotificationCompat.BigTextStyle().bigText(th_title))
.setStyle(new NotificationCompat.BigTextStyle().bigText(th_alert))
.setContentIntent(pendingIntent)
.setNumber(++numMessages)
.build();
notification.sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
notificationManager.notify(1000, notification);
Просто введите простой код:
notification.sound = Uri.parse("android.resource://"
+ context.getPackageName() + "/" + R.raw.sound_file);
Для звука по умолчанию:
notification.defaults |= Notification.DEFAULT_SOUND;
Вы должны использовать RingtoneManager
private static final int MY_NOTIFICATION_ID = 1;
private NotificationManager notificationManager;
private Notification myNotification;
private final String myBlog = "http://niravranpara.blogspot.com/";
Код для noficationmanager с мелодией сигнала тревоги вы также можете установить мелодию звонка RingtoneManager.TYPE_RINGTONE
notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri
.parse(myBlog));
PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Notification note = new Notification(R.drawable.ic_launcher, "Alarm", System.currentTimeMillis());
note.setLatestEventInfo(getApplicationContext(), "Alarm", "sound" + " (alarm)", pi);
Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
if(alarmSound == null){
alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
if(alarmSound == null){
alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
}
}
note.sound = alarmSound;
note.defaults |= Notification.DEFAULT_VIBRATE;
note.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(MY_NOTIFICATION_ID, note);
Вы должны использовать строитель. setSound
Intent notificationIntent = new Intent(MainActivity.this, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(MainActivity.this, 0, notificationIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(contentIntent);
builder.setAutoCancel(true);
builder.setLights(Color.BLUE, 500, 500);
long[] pattern = {500,500,500,500,500,500,500,500,500};
builder.setVibrate(pattern);
builder.setStyle(new NotificationCompat.InboxStyle());
Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
if(alarmSound == null){
alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
if(alarmSound == null){
alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
}
}
// Add as notification
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
builder.setSound(alarmSound);
manager.notify(1, builder.build());
Вы можете сделать функцию:
public void playNotificationSound()
{
try
{
Uri alarmSound = `Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + MyApplication.getInstance().getApplicationContext().getPackageName() + "/raw/notification");`
Ringtone r = RingtoneManager.getRingtone(MyApplication.getInstance().getApplicationContext(), alarmSound);
r.play();
}
catch (Exception e)
{
e.printStackTrace();
}
}
Вызов этой функции при получении уведомления.
Здесь raw - это папка в res, а уведомление - это звуковой файл в необработанной папке.
1-й поместите файл "yourmp3file".mp3 в папку raw (т.е. внутри папки Res)
2-й в вашем коде.
Notification noti = new Notification.Builder(this)
.setSound(Uri.parse("android.resource://" + v.getContext().getPackageName() + "/" + R.raw.yourmp3file))//*see note
Это то, что я вложил внутри моего onClick (View v) как только "context(). getPackageName()" не работает оттуда, поскольку он не получит какой-либо контекст
На Oreo (Android 8) и выше это нужно сделать для кастомного звука следующим образом (каналы уведомлений):
Uri soundUri = Uri.parse(
"android.resource://" +
getApplicationContext().getPackageName() +
"/" +
R.raw.push_sound_file);
AudioAttributes audioAttributes = new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_ALARM)
.build();
// Creating Channel
NotificationChannel channel = new NotificationChannel("YOUR_CHANNEL_ID",
"YOUR_CHANNEL_NAME",
NotificationManager.IMPORTANCE_HIGH);
channel.setSound(soundUri, audioAttributes);
((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE))
.createNotificationChannel(notificationChannel);
notification.sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
private void showNotification() {
// intent triggered, you can add other intent for other actions
Intent i = new Intent(this, MainActivity.class);
PendingIntent pIntent = PendingIntent.getActivity(this, 0, i, 0);
//Notification sound
try {
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
r.play();
} catch (Exception e) {
e.printStackTrace();
}
// this is it, we'll build the notification!
// in the addAction method, if you don't want any icon, just set the first param to 0
Notification mNotification = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
mNotification = new Notification.Builder(this)
.setContentTitle("Wings-Traccar!")
.setContentText("You are punched-in for more than 10hrs!")
.setSmallIcon(R.drawable.wingslogo)
.setContentIntent(pIntent)
.setVibrate(new long[] { 1000, 1000, 1000, 1000, 1000 })
.addAction(R.drawable.favicon, "Goto App", pIntent)
.build();
}
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// If you want to hide the notification after it was selected, do the code below
// myNotification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(0, mNotification);
}
вызывайте эту функцию где хотите. это сработало для меня
В Android OREO или более поздней версии После Зарегистрируйте канал в системе; вы не можете изменить важность или другие способы уведомления после этого того же канала (перед удалением приложения)
private void createNotificationChannel() {
// Create the NotificationChannel, but only on API 26+ because
// the NotificationChannel class is new and not in the support library
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CharSequence name = getString(R.string.channel_name);
String description = getString(R.string.channel_description);
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
channel.setDescription(description);
// Register the channel with the system; you can't change the importance
// or other notification behaviors after this
NotificationManager notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
}
channel.setSound(Settings.System.DEFAULT_NOTIFICATION_URI,audioAttributes);
Приоритет также имеет значение Приоритет уведомления " Больше всего здесь" устанавливается высоким
Видимый пользователем уровень важности (Android 8.0 и выше)
1) Срочный Делает звук и появляется как хедз-ап notification--> IMPORTANCE_HIGH
2) Высокий издает звук → IMPORTANCE_DEFAULT
3) Средний Нет звука → IMPORTANCE_LOW
4) Низкая Нет звука и не появляется в состоянии bar-> IMPORTANCE_MIN
То же самое работает в том же порядке Приоритет (Android 7.1 и ниже)
1) PRIORITY_HIGH или PRIORITY_MAX
2) PRIORITY_DEFAULT
3) PRIORITY_LOW
4) PRIORITY_MIN
Вы можете сделать следующее:
MediaPlayer mp;
mp =MediaPlayer.create(Activity_Order_Visor_Atender.this, R.raw.ok);
mp.start();
Вы создаете пакеты между вашими ресурсами с именем raw, и там вы держите свои звуки, а затем просто называете это.
по экземпляру класса Notification.builder (строитель), который приведен ниже, вы можете воспроизводить звук по умолчанию при уведомлении:
builder.setDefaults(Notification.DEFAULT_SOUND);