我在应用程序文件夹中有一个mp3文件。我可以通过进行访问getFilesDir().getAbsolutePath()
,但是我无法成功地将其用作通知的播放声音。
我的目标是允许用户下载自定义音,并且我不想覆盖默认的应用声音,因此铃声被存储在上述文件目录中。
如何获得用作通知声音的文件的正确路径?
您需要使用来将文件URI传递给通知FileProvider
。例如:
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)
。还有其他可能的基本路径。有关完整列表,请查看有关如何定义提供者可用文件的文档。
意见:如您在评论中所述,要播放的音频文件不应包含特殊字符,下划线或任何其他受限字符。命名文件就像命名/res
资源文件一样。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句