Недавно я обновил проект iOS от Cordova 3.3 до 3.5.
mp3 файлы (ранее загруженные в папку стандартных документов iOS) не будут воспроизводиться с использованием медиа-API/плагина. Этот код надежно работает на iOS для многих версий, включая Cordova 3.3... mp3 файлы были загружены в подкаталог под названием "Загрузки" в стандартной папке документов "Приложения для iOS".
В консоли XCode появляется следующая ошибка:
Файл неизвестного ресурса://localhost/Users/weeasle/Library/Application%20Support/iPhone%20Simulator/6.1/Applications/{App-ID}/Documents/Downloads/testsound.mp3 '
В моем коде (после нескольких блоков кода для API плагинов файлов) я получаю каталог, используя: downloadDirFullPath = window.appRootDir.toURL();
Чтобы соответствовать новым изменениям в API файлов 3.5, я недавно изменил это из downloadDirFullPath = window.appRootDir.fullPath;
Является ли API Media Plugin для Cordova 3.5 сломанным для воспроизведения звука из каталога документов приложений iOS???
Или я просто очень устал и упускаю что-то очевидное... Любые предложения или информация очень ценятся.
Chris aka weeasle
UPDATE ON 20/Jun/14: Исправлено. Теперь я могу загрузить загруженный .mp3 для воспроизведения на iOS Cordova 3.5... По-видимому, с новой файловой системой Cordova 3.5 метод entry.fullPath больше не работает и заменяется entry.toURL() в соответствии с https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md
Это хорошо работает при обращении к изображениям с помощью Кордовы. Однако в течение некоторого времени была увлечена мультимедийным плагином на iOS: для воспроизведения звука он не принимает URL-адреса, начинающиеся с файла:///он принимает только абсолютные пути например /var/mobile/Applications/ {GUID}/Documents/
Ответ и исправление заключается в использовании нового метода toInternalURL(), вызванного внутри записи, возвращаемой из файла fileSystem.root.getDirectory. Точный вызов, который я использую, - downloadDirFullPath = window.appRootDir.toInternalURL(); (вызывается из записи, переданной файловым файлом fileSystem.root.getDirectory).
Это возвращает: cdvfile://localhost/persistent/Downloads/, который при предварительном нажатии на .mp3 или другие аудиофайлы успешно воспроизводится в iOS..
Это также работает для отображения изображений и носителей, поэтому это единственное надежное решение для Cordova iOS 3.5 и выше.
Это, безусловно, предпочтительное решение, поскольку оно безопаснее, чем использование относительных путей (как будто в будущем Apple внесет существенные изменения в структуру файла с выпуском iOS, доступ к файлу может сломаться)...
Еще одно примечание - помимо вызовов/методов выше, downloadDirName = window.appRootDir.name; также устанавливает cdvfile://localhost/persistent/base path
Weeasle