0

我正在尝试在我的应用程序中实现自定义通知声音。我编写了以下代码,但应用程序只播放默认声音,而不是我在 raw 文件夹中添加的自定义声音。收到通知后,日志甚至不会抛出任何错误或异常,说明它为什么不播放自定义声音。我尝试在线搜索并尝试遵循不同的方法,但无济于事。请让我知道我哪里出错了。

编辑:有人可以发布它的代码吗,我似乎找不到任何有用的东西

Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button = findViewById(R.id.notify);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel channel = new NotificationChannel("MyCuS Notification", "My Notification", NotificationManager.IMPORTANCE_HIGH);
        NotificationManager manager = getSystemService(NotificationManager.class);
        AudioAttributes.Builder audioAttributes = new AudioAttributes.Builder()
                .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE);
        channel.setSound(Uri.parse("android.resources://" + getPackageName() + "/" + R.raw.bg_reminder_alarm),audioAttributes.build());
        manager.createNotificationChannel(channel);
    }

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this, "MyCuS Notification");
            builder.setContentTitle("MyTitle");
            builder.setContentText("TESTING");
            builder.setSmallIcon(R.drawable.ic_launcher_background);
            builder.setAutoCancel(true);
            builder.setSound(Uri.parse("android.resources://" + getPackageName() + "/" + R.raw.bg_reminder_alarm));
            NotificationManagerCompat managerCompat = NotificationManagerCompat.from(MainActivity.this);
            managerCompat.notify(1, builder.build());
        }
    });
}

编辑2:我尝试删除现有频道并发送通知以创建新频道,当新创建频道的描述在发送第二个通知后更改时,就好像频道被覆盖或删除并创建了新的默认频道。

在此处输入图像描述

4

1 回答 1

1

由于 Android Oreo / 8 Notificationsound 来自频道,并且只能在您第一次通过 channel.setSound() 添加频道时设置。如果您想稍后更改它,您需要删除该频道,然后将其重新添加到系统中。不过,用户将收到有关该行为的警告(应用程序删除频道 X 次)。 https://developer.android.com/guide/topics/ui/notifiers/notifications#ManageChannels

如果您想每次都拥有自定义声音,则需要一个没有通道声音的 ForegroundService 作为前台通知 (setSound(null)),然后使用 Notificationstream 上的 MediaPlayer 播放自定义声音。

于 2022-02-17T14:24:09.057 回答