Приложение на основе Cordova: как воспроизвести аудиофайл из внутренней памяти Android/папки «Музыка»Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Приложение на основе Cordova: как воспроизвести аудиофайл из внутренней памяти Android/папки «Музыка»

Сообщение Anonymous »

Информация о версии:
cordova версия 12.0.0
cordova-media-plugin версия 7.0.0 [ https://cordova.apache.org/docs/en/12.x ... index.html]
cordova-plugin-file версии 8.1.0 [https://cordova.apache.org/docs/en/10.x ... ugin-file/]
cordova-plugin-file-transfer версия 2.0.0 [https://github.com/apache/cordova-plugin-file-transfer]
cordova-plugin-wkwebview-file-xhr версия 3.1.1
Android Target SDK = 34
Проблема/вопрос:
Я пытаюсь получить Cordova- приложение для воспроизведения файла, загруженного в папку «Внутренняя память/Музыка» устройства Android. Приведенная ниже функция downloadAudio работает правильно и сохраняет файл там (хотя в документации плагина к файлам указано, что это место — SD-карта, но на моем устройстве это работает не так).
  • Может ли медиа-плагин воспроизводиться из папки «file:///storage/emulated/0/Music/[file].mp3»? Похоже, мне нужна ссылка на cdvfile для медиа-плагина, но я не уверен, что формат «cdvfile://» работает и с этим внешним расположением. Казалось бы, это предназначено только для использования внутри приложения?
  • Я не могу получить ни один из методов преобразования URL-адресов (например, toURL выдает мне TypeError: fileTransferInternalUrl.toURL не является функцией) для работать с местоположением моего файла, не возвращая ошибку, чтобы сгенерировать URL-адрес компакт-диска для медиа-плагина.
  • Если медиа-плагин не поддерживает воспроизведение со ссылкой на внешнее местоположение приложения, Можно ли использовать copyTo (и перезаписать существующий файл) из внешнего местоположения во временное внутреннее местоположение, доступное медиа-плагину? (Документация copyTo, по-видимому, отсутствует в более поздних версиях документации по файловому плагину, и при ее использовании я также сталкиваюсь с ошибками. Можно предоставить более подробную информацию, если это возможно. [https://stackoverflow.com/questions/ 31548292/copying-a-file-using-cordova] у меня не сработало, как и пример на [https://cordova.apache.org/docs/en/2.4. ... entry.html ].
Я не получаю никаких ошибок, связанных с разрешениями. Я не думаю, что загрузка сработала бы, если бы это была проблема с разрешениями (?) Я. знаю, что в разрешениях Android произошли изменения.
Будем благодарны за любую помощь!
function downloadAudio (fileTransferWebUrl,thisElement) {
fileTransferWebUrl = encodeURI(fileTransferWebUrl);
if (isAndroidApp == true) {
var fileNameMP3Array = fileTransferWebUrl.split("/");
var fileNameMP3 = fileNameMP3Array[fileNameMP3Array.length-1]; //get file name from web URL
fileTransferInternalUrl = cordova.file.externalRootDirectory + 'Music/' + fileNameMP3; // file:///storage/emulated/0/Music/[file].mp3
}
try {
fileTransfer.download(
fileTransferWebUrl,
fileTransferInternalUrl,
function (entry) {
alert('Download complete to Music/' + fileNameMP3);
},
function(error){ //error
alert("Download error source " + error.source + " download error target " + error.target + " download error code " + error.code + " http_status " + error.http_status + " body " + error.body + " exception " + error.exception);
},
true, //trust all hosts. safer to be false, set to true accepts all security certificates, not recommended for production use
);
}
catch (e) {
alert(e);
}
}

function playDownloadedAudio (fileTransferWebUrl, thisElement) {
var nativePath = "";
fileTransferWebUrl = encodeURI(fileTransferWebUrl);
if (isAndroidApp == true) {
var fileNameMP3Array = fileTransferWebUrl.split("/");
var fileNameMP3 = fileNameMP3Array[fileNameMP3Array.length-1]; //get file name from web URL
fileTransferInternalUrl = cordova.file.externalRootDirectory + 'Music/' + fileNameMP3; //cordova.file.externalRootDirectory
alert(fileTransferInternalUrl); // file:///storage/emulated/0/Music/A_casa_vete_y_cuenta_alli.mp3
}
try {
nativePath = fileTransferInternalUrl; // how do I get this into a path Media plugin recognizes?
my_media = new Media(nativePath,
function () //success;
{ },
function (err) //error
{
alertOK(translate('Error in playback. Please contact support. \n Code: ','text') + error.code + '\n '+translate('Message:','text')+' '+error.message + '\n');
playing = false;
}
);
my_media.play();
}
catch (e) {
alert("error: " + e);
}
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... rage-music
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»