Android:自定义通知声音无法播放

4

我已经尝试了网站上所有可用的答案,但是不知何故无法使通知声音工作。我正在测试的当前代码是这样的(通知是在闹钟接收器中构建的):

public class AlarmReceiver extends BroadcastReceiver {

private static final int NOTIFICATION_ID = 0;

@Override
public void onReceive(Context context, Intent intent) {


  NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
            .setContentTitle(context.getString(R.string.app_name))
            .setContentIntent(PendingIntent.getActivity(context, 0, new Intent(context, MainActivity_.class), 0))
            .setContentText("temporary text")
            .setAutoCancel(true)
            .setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE
                    + "://" + context.getPackageName() + "/raw/alert"))
            .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE)
            .setPriority(NotificationCompat.PRIORITY_DEFAULT)
            .setWhen(System.currentTimeMillis())
            .setSmallIcon(R.drawable.ic_stat_notification);

    Notification notification = builder.build();
    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(NOTIFICATION_ID, notification);

然而,声音可以通过MediaPlayer播放,因此格式不是问题所在。 可能与声音的长度(30秒)有关吗? 感谢您的帮助!


什么是声音格式?我在使用MediaPlayer播放声音时遇到了问题,但是无法从通知中播放声音...尝试将您的声音文件替换为wmv格式,例如。(我不记得我遇到问题的文件格式是什么) - Felipe Silveira
我已经用一个wav文件替换了它,尝试删除原始文件,但没有起作用。 这里有一些输出,也许如果路径不对,你们可以想出一些东西。 D/NotificationManager﹕ notify: notification.sound android.resource://包名(我必须隐藏它)/raw/alert - Leo Starić
请注意:R.raw.sound 表示你的音频文件位于 res/raw/sound.jpg。在 Android 中,可以使用 R.raw.sound 访问此音频文件。 - Rafael
2个回答

6
尝试将您的 .setSound() 更改为以下内容:
.setSound(Uri.parse("android.resource://"
                            + context.getPackageName() + "/"
                            + R.raw.alert))

希望这个能够起作用。


好的,如果你认为声音的长度会有所不同,那么试试一个持续时间较短的声音,如果可以的话,那么持续时间就是问题所在,记得使用我发布的相同代码来设置.setSound()。 - Mukesh Rana
抱歉我离开了一段时间,但是较短的版本也不起作用。(5秒)。这可能太多了吗? 到目前为止,我已经排除了URI错误的选项,因为我正在使用相同的URI进行媒体播放器,并且它正在工作。 - Leo Starić
很高兴能帮助你.. :) - Mukesh Rana
@MukeshRana 这段代码是有效的,但如果设备通知声音关闭,则不会增加音量,最终也听不到通知声音。 - user3233280
在经过将近24小时的尝试和搜索之后,我终于找到了解决方案。非常感谢这个答案! - Emzor
显示剩余5条评论

2

如果Mukesh的正确答案对您不起作用,请在此处阅读!

Mukesh发布的答案是正确的,但对我来说,在我发现我错误地配置了通知之前它并没有起作用!!(或者有一个Android BUG)

这段代码片段不起作用

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder( context )
     .setDefaults( DEFAULT_VIBRATE | FLAG_SHOW_LIGHTS )
     .setContentTitle( title )
     .setContentText( message )

     .setSound( "android.resource://"
                        + context.getPackageName() + "/"
                        + R.raw.alert)).build();

这段代码有效。
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder( context )
     .setContentTitle( title )
     .setContentText( message )
     .setSound( "android.resource://"
                        + context.getPackageName() + "/"
                        + R.raw.alert)).build();

-

.setDefaults( DEFAULT_VIBRATE | FLAG_SHOW_LIGHTS )

观察:就像您看到的上面那行,我没有使用常量DEFAULT_SOUND,但仍然无法工作。


谢谢!!!我一直非常沮丧,因为它没有播放我选择的声音,只有系统通知声音。即使设置为声音,也要将setDefaults关闭,然后就可以完美地工作了! - Ben987654
@Tano,你尝试过在Android版本7.0(N)和8.0(O)之上玩设备存储文件路径URI时是否会遇到FileUriExposedException异常?你有什么想法吗? - Sagar
1
这很好,但是通知声音的长度有限制吗? - Michael Fever

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