Вам необходимо передать URI файла в ваше уведомление, используя FileProvider
. e.g.:
val file = File(fileAbsolutePath)
FileProvider.getUriForFile(context, authority, file)
Также вам нужно будет указать провайдера на вашем AndroidManifest.xml
, как показано в примере ниже:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="your authority here"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"/>
</provider>
Что касается file_paths
, вам нужно будет указать, какие файлы будут доступны. Как указано в документации:
FileProvider может генерировать URI контента только для файлов в
каталоги, которые вы указали заранее. Чтобы указать каталог,
указать его область хранения и путь в XML, используя дочерние элементы
элемент.
Например:
<files-path name="my_audios" path="audios/" />
Имя тега будет определять базовую папку, из которой вы читаете файлы.
<files-path ... />
отобразится на files/
, что является тем же путем, который вы получаете от Context.getFilesDir()
.
<cache-path ... />
приведет к подкаталогу кеша вашего приложения, который является тем же путем, что и getCacheDir()
.
<external-path ... />
указывает на корень вашего внешнего носителя. То же, что Environment.getExternalStorageDirectory()
.
<external-files-path ... />
ведет к корню внешней области хранения вашего приложения. Тот же путь, что и Context#getExternalFilesDir(String)
.
Есть и другие возможные базовые пути. Полный список можно найти в документации о том, как определить доступные для провайдера файлы .
Obs.: Как вы указали в своем комментарии, аудиофайлы, которые вы хотите воспроизвести, не должны иметь специальных символов, подчеркиваний или любых других запрещенных символов. Назовите файл так же, как для файлов ресурсов /res
.