首页 > 解决方案 > 如何设置每次出现通知时都会播放的自定义声音?

问题描述

我有一个下拉列表 ( spinner),其中显示了我在外部存储中拥有的所有 MP3 音乐文件。我希望每次弹出通知时播放 MP3 音乐,这将由用户选择。

读取外部存储中所有 MP3 文件的代码:

String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
String[] projection = {
        MediaStore.Audio.Media.TITLE,
};
EnableRuntimePermission();
Cursor cursor = this.managedQuery(
        MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
        projection,
        selection,
        null,
        null);

spin.setOnItemSelectedListener(this);
List<String> songs = new ArrayList<String>();
while (cursor.moveToNext()) {
    songs.add(cursor.getString(0));
}

public void EnableRuntimePermission() {

    if (ActivityCompat.shouldShowRequestPermissionRationale(
            Pop_up_2.this,
            Manifest.permission.READ_EXTERNAL_STORAGE)) {

       // Toast.makeText(Pop_up_2.this, "Now you can read music files", Toast.LENGTH_LONG).show();

    } else {

        ActivityCompat.requestPermissions(Pop_up_2.this, new String[]{
                Manifest.permission.READ_EXTERNAL_STORAGE}, RequestPermissionCode);

    }
}

创建通知的代码:

NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(R.drawable.ic_today_black_24dp)
            .setContentTitle(s3)
            .setContentText(message)
            .setPriority(NotificationCompat.PRIORITY_DEFAULT);

NotificationManagerCompat notification=NotificationManagerCompat.from(context);
notification.notify(NOTIFICATION_ID,builder.build());

编辑:我想知道是否有任何方法可以解析String item1 = parent.getItemAtPosition(position).toString();为 Uri,然后将该 Uri 参数设置为RingtoneManager

   Uri par=Uri.parse(item1);
    Uri alarmSound = RingtoneManager.setActualDefaultRingtoneUri(context,RingtoneManager.TYPE_NOTIFICATION,par);
                        .
                        .
                        .
                        .
                        .
builder.setSound(alarmSound);

但是我收到一个错误,因为类型不兼容。

标签: javaandroidnotificationmanager

解决方案


推荐阅读