Я хочу загрузить аудиофайл из хранилища firebase, а затем сохранить его на устройстве, чтобы любое другое приложение или проигрыватель musi c (и мое приложение позже) могло получить доступ и воспроизвести.
The Документация говорит, что все файлы мультимедиа с общим доступом (изображения, аудиофайлы, видео) должны быть сохранены с использованием MediaStore API, но я не смог найти ничего полезного о том, как это сделать.
Также я хочу, чтобы файл находился в постоянном месте, таком как MyApp / Audio, чтобы, когда пользователь переходит через проводник, он также мог его найти.
Пожалуйста, предоставьте мне полный пример того, как сделайте это.
Я попытался применить пример из документа следующим образом:
private fun createFile() {
val resolver = applicationContext.contentResolver
val audioCollection =
MediaStore.Audio.Media.getContentUri(if (Build.VERSION.SDK_INT <= 28) VOLUME_EXTERNAL else VOLUME_EXTERNAL_PRIMARY)
val newSongDetails = ContentValues().apply {
put(MediaStore.Audio.Media.DISPLAY_NAME, "My Song.mp3")
}
val myFavoriteSongUri = resolver.insert(audioCollection, newSongDetails)
if(myFavoriteSongUri == null){
Toast.makeText(this, "myFavoriteSongUri is null", Toast.LENGTH_SHORT).show()
return
}
val path = myFavoriteSongUri.path
if(path == null){
Toast.makeText(this, "path is null", Toast.LENGTH_SHORT).show()
return
}
downloadFile(File(path))
}
private fun downloadFile(file: File) {
val url = "example url"
val ref = Firebase.storage.getReferenceFromUrl(url)
ref.getFile(file).addOnSuccessListener {
Toast.makeText(this, "File downloaded!", Toast.LENGTH_SHORT).show()
}.addOnFailureListener {
Toast.makeText(this, "Download failed!", Toast.LENGTH_SHORT).show()
}
}
Во-первых, в документации говорится, что в API <= 28 вместо этого используйте VOLUME_EXTERNAL из VOLUME_EXTERNAL_PRIMARY, но когда я использовал приведенный ниже код, android студия показала мне предупреждение о том, что VOLUME_EXTERNAL требует уровня API 29. </p>
Во-вторых, когда я запускаю код, приложение вылетает с h эта ошибка:
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.lastIndexOf(int)' on a null object reference