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

时间:2018-05-08 13:51:05

标签: android push-notification

我在app文件夹中有一个mp3文件。我可以通过getFilesDir().getAbsolutePath()访问它,但我没有成功使用声音来播放通知。

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

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

1 个答案:

答案 0 :(得分:1)

您需要使用FileProvider将文件URI传递给通知。 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)

还有其他可能的基本路径。有关完整列表,请查看有关如何define the provider available files

的文档

Obs。:正如您在评论中所述,您要播放的音频文件不应包含特殊字符,下划线或任何其他受限字符。像命名/res资源文件一样命名文件。