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

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

Сообщение Anonymous »

Информация о версии:
cordova версия 12.0.0
cordova-media-plugin версия 7.0.0< /p>
cordova-plugin-file версии 8.1.0
cordova-plugin-file-transfer версии 2.0.0
cordova-plugin-wkwebview-file-xhr версия 3.1.1
Android Target SDK = 34
Проблема/вопрос:< /strong>
Мне не удается заставить приложение на основе Cordova воспроизводить файл, загруженный в папку «Внутренняя память/Музыка» устройства Android. Приведенная ниже функция downloadAudio работает правильно и сохраняет файл там (хотя в документации плагина к файлам указано, что это место — SD-карта, но на моем устройстве это работает не так).
  • Может ли медиа-плагин воспроизводиться из папки «file:///storage/emulated/0/Music/[file].mp3»? Похоже, мне нужна ссылка на cdvfile для медиа-плагина, но я не уверен, что формат «cdvfile://» работает и с этим внешним местоположением. Казалось бы, это предназначено только для внутреннего использования в приложении?

РЕДАКТИРОВАТЬ: я получаю сообщение об ошибке, что файл не может быть найден, если я ссылаются на поддельное местоположение, поэтому в отсутствие этой ошибки может показаться, что плагин Media может видеть файл. Однако после удаления синтаксической ошибки плагин Media выдает ошибку «Код 1, подготовка не удалась: статус = 0x1». Эта ссылка [https://stackoverflow.com/questions/376 ... rks-on-2-2] кажется связанной, но меня смущает. . нужно лучше это понять.
  • Я не могу получить ни один из методов преобразования URL-адресов (например, toURL выдает мне TypeError: fileTransferInternalUrl.toURL не является функцией) для работы с местоположением моего файла без возврата ошибки, чтобы сгенерировать URL-адрес cdv-файла для медиа-плагина.
< strong>EDIT: Кажется, что URL-адрес моего файла может работать, хотя toURL не работает.

[*]Если Медиа-плагин не поддерживает воспроизведение со ссылкой на внешнее местоположение приложения. Можно ли использовать copyTo (и перезаписать существующий файл) из внешнего местоположения во временное внутреннее местоположение, доступное для медиа-плагина? (Документация copyTo, по-видимому, отсутствует в более поздних версиях документации по файловому плагину, и при ее использовании я также сталкиваюсь с ошибками. Можно предоставить более подробную информацию, если это возможно.

Копирование файла с помощью Cordova
не помогло ни мне, ни примеру на
https://cordova .apache.org/docs/en/2.4.0/cordova/file/fileentry/fileentry.html.
Я не получаю никаких ошибок, связанных с разрешениями. Я не думаю, что это возможно. загрузка работала бы, если бы это была проблема с разрешениями (?). Я знаю, что в разрешениях Android были изменения.
Буду очень признателен за любую помощь!
Обновление/редактирование 8.10.24:
Я обновил код согласно предложению Эрика по коду для toURL, который возвращает URL-адрес. Однако это дает мне следующее. ошибки, которые, похоже, указывают на то, что медиаплеер не может использовать этот URL-адрес?
Ошибка медиаплеера: код 1, AudioPlayer.onError(1, -2147483648) [неизвестная ошибка]
Ошибка консоли:
java.net.ConnectException: Failed to connect to localhost/127.0.0.1:443
at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:147)
at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:116)
at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:186)
at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:128)
at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:289)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:232)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:465)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:542)
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:106)
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:30)
at android.media.MediaHTTPConnection.seekTo(MediaHTTPConnection.java:306)
at android.media.MediaHTTPConnection.getMIMEType(MediaHTTPConnection.java:499)
at android.media.IMediaHTTPConnection$Stub.onTransact(IMediaHTTPConnection.java:161)
at android.os.Binder.execTransactInternal(Binder.java:1220)
at android.os.Binder.execTransact(Binder.java:1179)

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
}
resolveLocalFileSystemURL(cordova.file.dataDirectory + fileNameMP3, function (entry) {
nativePath = entry.toURL();
console.log("cordova.file.dataDirectory + fileNameMP3 = " + cordova.file.dataDirectory + fileNameMP3 + " | nativePath = " + nativePath);
if (my_media != null) {
my_media.release(); // clean up old file
}
my_media = new Media(nativePath,
function () //success;
{ },
function (error) //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();
});
}


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

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