如何使用应用程序专用文件夹中的文件设置通知声音?



我在应用程序文件夹中有一个mp3文件。我可以通过getFilesDir().getAbsolutePath()访问它,但我没有成功用作要播放的通知声音。

我的目标是允许用户下载自定义音调,我不想覆盖默认的应用程序声音,因此铃声存储在上述文件目录中。

如何获取要用作通知声音的文件的正确路径?

您需要使用FileProvider将文件 URI 传递给通知。 例如:

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,您必须声明哪些文件可用。如文档中所述:

文件

提供程序只能为以下文件生成内容 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资源文件一样命名文件。

最新更新