为啥 Galaxy S21 没有自定义通知声音

Posted

技术标签:

【中文标题】为啥 Galaxy S21 没有自定义通知声音【英文标题】:Why is Galaxy S21 not doing custom notification sounds为什么 Galaxy S21 没有自定义通知声音 【发布时间】:2022-01-03 16:17:17 【问题描述】:

我有一个应用程序可以发出由日历事件触发的自定义通知声音。这在我的旧手机上运行良好,但在我的新 Galaxy S21 上,它发出系统默认通知声音而不是自定义通知声音。我在模拟器上使用运行 android 11 的 AVD 进行了尝试,这是 S21 声称正在运行的版本,并且可以正常工作。自定义声音存在于 S21 上,可使用音乐播放器播放。

Android Notification sound defaulting back instead of playing custom sound 是一个非常古老的问题,报告了类似的问题,那里的答案建议重新启动手机,我尝试过但没有帮助。

发出通知的代码如下所示:-

private void emitNotification(String smallText, String bigText, String path) 
    RemoteViews layout = new RemoteViews(
        "uk.co.yahoo.p1rpp.calendartrigger",
        R.layout.notification);
    layout.setTextViewText(R.id.notificationtext, bigText);
    DateFormat df = DateFormat.getTimeInstance(DateFormat.SHORT);
    layout.setTextViewText(R.id.notificationtime,
                           df.format(System.currentTimeMillis()));
    Notification.Builder NBuilder
        = new Notification.Builder(this)
        .setSmallIcon(R.drawable.notif_icon)
        .setContentTitle(smallText)
        .setContent(layout);
    if ((path != null) && !path.isEmpty())
    
        Uri uri = new Uri.Builder().path(path).build();
        AudioAttributes.Builder ABuilder
            = new AudioAttributes.Builder()
            .setContentType(AudioAttributes.CONTENT_TYPE_UNKNOWN)
            .setLegacyStreamType(AudioManager.STREAM_NOTIFICATION);
        NBuilder.setSound(uri, ABuilder.build());
    
    // Show notification
    NotificationManager notifManager = (NotificationManager)
        getSystemService(Context.NOTIFICATION_SERVICE);
    notifManager.notify(notifyId++, NBuilder.build());

整个源代码可在 GitHub 上找到 rparkins999/CalendarTrigger 分支 fix3.3

如果有人想在另一部手机上试用它,我已经在 git 树中包含了一个内置的 APK。您也可以从源代码构建:您将需要一个相对于项目根目录的 ../Keys/Keystore.properties 文件,因为我没有发布我的私人签名密钥。

要演示自定义通知声音,运行程序,为其授予所需的所有权限,点击“NEW EVENT CLASS”,为类命名,然后点击创建:然后您应该会看到一个包含调用按钮的屏幕活动来定义类的特征。

触摸“事件启动类的操作...”,您应该会看到一个屏幕,提供程序可以执行的各种操作(并非所有操作都有效)。依次触摸“显示通知”、“播放声音”和“浏览声音文件”:您应该会看到一个文件浏览器。

当您选择一个文件时,它将带您回到上一个屏幕,但“浏览声音文件”将被声音文件的路径所取代。轻触返回按钮返回按钮屏幕,然后轻触“类的立即事件...”。它应该播放声音。

在模拟器上会这样,但在 S21 上会播放默认声音。

按照设置,您创建的类将在每个日历事件上发出通知。您可以通过删除课程或为课程中的日历事件设置一些条件来阻止这种情况:在课程定义屏幕上有用于这两种操作的按钮。

我不知道这个问题是否是 S21 中的一个错误,还是由我无法找到的一些晦涩的设置引起的。任何帮助都将不胜感激,尤其是有关该应用在运行 Android 11 的其他手机上是否正常运行的信息。当然,修复或解决方法会更好!

我刚刚安装了最新的 S21 更新。现在问题更严重了!我的自定义声音通知中根本没有任何声音。

【问题讨论】:

【参考方案1】:

在这种特殊情况下,问题在于文件 (.m4a) 中的音频格式。 S21的音乐播放器可以播放,我旧手机的通知声音播放器可以播放,但是S21的通知播放器显然不能播放。

我在我的 PC 上使用 FFmpeg 将 .m4a 转换为 .mp3,S21 通知播放器可以播放,现在它可以工作了。

因此,假设手机可以通过其音乐播放器播放声音格式,通知逻辑也可以处理它是不安全的。

【讨论】:

以上是关于为啥 Galaxy S21 没有自定义通知声音的主要内容,如果未能解决你的问题,请参考以下文章

手机进入睡眠状态时不播放自定义通知声音

如何使用 FCM 在 ios 推送通知中播放自定义通知声音

APN 自定义通知声音问题

使用 Cloud Functions 播放自定义通知声音 - iOS

自定义通知声音在 Android Oreo 中不起作用

Monaca:使用 Onesignal 在 Android 中自定义通知声音和小图标