Reputation: 8727
I've used the newer NotificationCompat builder and I can't get the notification to make a sound. It will vibrate and flash the light. The android documentation says to set a style which I've done with:
builder.setStyle(new NotificationCompat.InboxStyle());
But no sound?
The full code:
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());
Upvotes: 169
Views: 256041
Reputation: 1827
This line for sound
notification.setDefaults(Notification.DEFAULT_SOUND)
Example
private fun createNotification() {
val downloadLogo = BitmapFactory.decodeResource(applicationContext.resources, R.drawable.download)
val notificationManager = createNotificationChannel()
val notification = NotificationCompat.Builder(applicationContext, "CHANNEL_ID")
.setSmallIcon(R.drawable.download)
.setContentTitle("Download")
.setContentText("Download Successfully")
.setLargeIcon(downloadLogo)
notification.setDefaults(Notification.DEFAULT_SOUND)
notificationManager.notify(0, notification.build())
}
private fun createNotificationChannel():NotificationManager {
val notificationManager = applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val name = applicationContext.getString(R.string.channel_name)
val descriptionText = applicationContext.getString(R.string.channel_description)
val importance = NotificationManager.IMPORTANCE_DEFAULT
val channel = NotificationChannel("CHANNEL_ID", name, importance).apply {
description = descriptionText
}
notificationManager.createNotificationChannel(channel)
}
return notificationManager
}
Upvotes: 0
Reputation: 1
Several answers discuss the use of NotificationChannel.setSound() for Oreo (Android 8, api 26) and above, and that once a channel is created, it cannot be changed.
What I hadn't realised it that when AndroidStudio runs your app and performs an "Install" step, it appears not to uninstall the previous version and its NotificationChannel first. Hence, changing something (e.g. the sound) and simply re-running will not work. You need to explicitly uninstall the app first, before running it again.
Upvotes: 0
Reputation: 338
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user);
btn= findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
notification();
}
});
}
private void notification() {
NotificationCompat.Builder builder= new
NotificationCompat.Builder(this);
builder.setAutoCancel(true);
builder.setContentTitle("Work Progress");
builder.setContentText("Submit your today's work progress");
builder.setSmallIcon(R.drawable.ic_email_black_24dp);
Intent intent=new Intent(this, WorkStatus.class);
PendingIntent pendingIntent= PendingIntent.getActivity(this, 1, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent);
builder.setDefaults(Notification.DEFAULT_VIBRATE);
builder.setDefaults(Notification.DEFAULT_SOUND);
NotificationManager notificationManager= (NotificationManager)
getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(1, builder.build());
}
It is complete notification with sound and vibrates
Upvotes: 0
Reputation: 415
Don't depends on builder or notification. Use custom code for vibrate.
public static void vibrate(Context context, int millis){
try {
Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
v.vibrate(VibrationEffect.createOneShot(millis, VibrationEffect.DEFAULT_AMPLITUDE));
} else {
v.vibrate(millis);
}
}catch(Exception ex){
}
}
Upvotes: 0
Reputation: 1517
// set notification audio (Tested upto android 10)
builder.setDefaults(Notification.DEFAULT_VIBRATE);
//OR
builder.setDefaults(Notification.DEFAULT_SOUND);
Upvotes: 0
Reputation: 451
In Android OREO or later version
After Register the channel with the system;
you can't change the importance
or
other notification behaviors after this of same Channel
(Before Uninstalling App)
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);
Priority also matters Most Here Set Notification Priority to high by using
User-visible importance level Importance (Android 8.0 and higher)
1)Urgent
Makes a sound and appears as a heads-up notification-->IMPORTANCE_HIGH
2)High
Makes a sound -->IMPORTANCE_DEFAULT
3)Medium
No sound -->IMPORTANCE_LOW
4)Low No sound and does not appear in the status bar->IMPORTANCE_MIN
same works in same order Priority (Android 7.1 and lower)
1)PRIORITY_HIGH or PRIORITY_MAX
2)PRIORITY_DEFAULT
3)PRIORITY_LOW
4)PRIORITY_MIN
Upvotes: 9
Reputation: 133
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);
}
call this function wherever you want. this worked for me
Upvotes: 4
Reputation: 1908
On Oreo (Android 8) and above it should be done for custom sound in this way (notification channels):
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);
Upvotes: 14
Reputation: 1063
by Notification.builder class instance (builder) that is given below you can play default sound on notification:
builder.setDefaults(Notification.DEFAULT_SOUND);
Upvotes: 0
Reputation: 11
You can do the following:
MediaPlayer mp;
mp =MediaPlayer.create(Activity_Order_Visor_Atender.this, R.raw.ok);
mp.start();
You create a packages between your resources with the name of raw and there you keep your sounds then you just call it.
Upvotes: -1
Reputation: 2619
Just put your sound file in the Res\raw\siren.mp3
folder, then use this code:
For Custom Sound:
Notification notification = builder.build();
notification.sound = Uri.parse("android.resource://"
+ context.getPackageName() + "/" + R.raw.siren);
For Default Sound:
notification.defaults |= Notification.DEFAULT_SOUND;
For Custom Vibrate:
long[] vibrate = { 0, 100, 200, 300 };
notification.vibrate = vibrate;
For Default Vibrate:
notification.defaults |= Notification.DEFAULT_VIBRATE;
Upvotes: 167
Reputation: 702
You can make a function:
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();
}
}
Call this function when you receive notification.
Here raw is the folder in res and the notification is the sound file in raw folder.
Upvotes: 8
Reputation: 901
1st put "yourmp3file".mp3 file in the raw folder(ie inside Res folder)
2nd in your code put..
Notification noti = new Notification.Builder(this)
.setSound(Uri.parse("android.resource://" + v.getContext().getPackageName() + "/" + R.raw.yourmp3file))//*see note
This is what i put inside my onClick(View v) as only "context().getPackageName()" wont work from there as it wont get any context
Upvotes: 5
Reputation: 1447
USE 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);
Upvotes: 13
Reputation: 127
notification.sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
Upvotes: 1
Reputation: 2763
Another way for the default sound
builder.setDefaults(Notification.DEFAULT_SOUND);
Upvotes: 55
Reputation: 3035
Just put the below simple code :
notification.sound = Uri.parse("android.resource://"
+ context.getPackageName() + "/" + R.raw.sound_file);
For Default Sound:
notification.defaults |= Notification.DEFAULT_SOUND;
Upvotes: 10
Reputation: 13785
You have to use builder.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());
Upvotes: 6
Reputation: 8727
What was missing from my previous code:
Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
builder.setSound(alarmSound);
Upvotes: 271
Reputation: 13785
You have to use RingtoneManager
private static final int MY_NOTIFICATION_ID = 1;
private NotificationManager notificationManager;
private Notification myNotification;
private final String myBlog = "http://niravranpara.blogspot.com/";
Code for noficationmanager with alarm ringtone you can also set ring tone 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);
Upvotes: 10