安卓通知构建器声音不起作用

16

我尝试了这里建议的很多方法,但对我都无效。 以下是我的源代码:

Intent resultIntent = new Intent(this, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, resultIntent,PendingIntent.FLAG_UPDATE_CURRENT);  
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("title")
.setContentText("Hello World!");
mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
mBuilder.setContentIntent(contentIntent);
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(0, mBuilder.build());

通知出现但没有声音,需要帮助吗?


1
我也遇到了同样的问题,请分享一下如果你找到了解决方案。 - Lucas Jota
我的问题是因为我写了 mBuilder.setDefaults(Notification.DEFAULT_ALL); 这行代码。这行代码使得 mBuilder.setSound 失效了。 - Emadpres
5个回答

24

设置默认标志:

mBuilder.setDefaults(Notification.DEFAULT_SOUND|Notification.DEFAULT_LIGHTS|Notification.DEFAULT_VIBRATE);

6
mBuilder.setDefaults(Notification.DEFAULT_ALL) 也应该有效。 - ubuntudroid

5

使用notification.sound代替mBuilder.setSound()解决了我的问题。

以下是代码 -

Notification notification = mBuilder.build();
notification.sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
mNotificationManager.notify(0, notification);

1
我能够在调试器中使用mBuilder.setSound(),并在设置声音后设置断点,但是如果没有断点,就不会发出任何声音。但是这种方法在有或没有调试器的情况下都有效。谢谢。 - shellman
这个解决了三星设备上的问题。 :) - ubuntudroid
如果某人在尝试这个或其他解决方法后仍然没有声音,请进入"设置/通知/应用通知",找到您测试的应用程序,并检查是否为此特定应用禁用了任何通知设置。 - CDrosos

2

我认为你设置声音的方式没有问题。另一种选择是按照以下方式设置声音。试一下看是否有帮助...

Uri alertSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("title")
.setContentText("Hello World!")
.setSound(alertSound);

更新
请尝试按照以下方式编辑NotificationManager并尝试...

NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = mBuilder.getNotification();
notification.flags = Notification.FLAG_AUTO_CANCEL; // cancel the notification when clicked by the user
mNotificationManager.notify(0, notification);

为什么不先尝试通过在按钮点击时调用Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification); r.play();来测试播放声音是否有效呢? - neo108
你是在设备上还是模拟器上测试它?我的建议是在实际设备上进行测试。 - neo108
我正在真实设备上进行测试。三星Galaxy Tab2。 - AhlyM
1
哦,你建议单独播放声音的方法很有效。这是一个不错的开始。 - AhlyM
通知出现了吗? - neo108
显示剩余3条评论

0
这也可能是由于与旧版API的轻微不兼容性引起的。例如,在SDK 25上编译但针对较旧版本(例如SDK 15)时,我添加了以下行来解决问题:
notification.audioStreamType = AudioManager.STREAM_ALARM;

0

我检查了一下我的声音设置,发现问题所在。通知级别被调到了零。

这很棘手,因为除了通知之外,其他声音都能正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接