IOS Phonegap Media Object – Comment puis-je accéder à une ressource dans le dossier WWW?

Je développe une application avec phonegap, et j'ai un fichier son que je veux jouer dans un chemin comme www / Sounds / sound.mp3, et j'essaie d'accéder à ce fichier à l'aide de l'objet Media de Phonegap dans l'ordre Pour le jouer.

Je ne peux pas trouver le chemin d'accès à ce fichier son dans un fichier javascript qui utilise l'objet Media? J'ai essayé des chemins comme, fichier: ///www/Sounds/sound.mp3, chemins relatifs, etc. et je ne peux pas y accéder. Je continue d'obtenir l'erreur suivante dans xcode 4

Will attempt to use file resource 'file:///www/Sounds/sound.mp3' Unknown resource 'file:///www/Sounds/sound.mp3' 

Quel chemin dois-je utiliser pour accéder au fichier? Ou dois-je copier le fichier son de mon répertoire www et dans mon dossier Ressources et y accéder?

Mon dossier WWW est référencé, pas sûr que cela marque une différence.

A partir de Cordova 3.3+, les 2 autres réponses ne sont pas correctes. Cela devrait fonctionner même si vous venez de lui transmettre un nom de fichier.

Mais, cela ne fonctionnera que dans iOS si l'extension de fichier est .wav .

Cela fonctionnera:

 var media = new Media('recording.wav', ...); 

Ce ne sera pas:

 var media = new Media('recording.mp3', ...); 

Il existe une version modifiée de getPhoneGapPath qui fonctionne pour moi à la fois sur iOS et Android. Il ne se limite pas à travailler uniquement sur des fichiers ayant un nom de fichier de 10 caractères 🙂

 getPhoneGapPath: function () { 'use strict'; var path = window.location.pathname; var phoneGapPath = path.substring(0, path.lastIndexOf('/') + 1); return phoneGapPath; } var resource = getPhoneGapPath() + 'audio/audio.mp3'; 

GetPhoneGapPath () reviendra:

IOS: / var / mobile / Applications / {GUID} / {appName} / www /

Android: / android_asset / www /

Utilisez window.location.pathname pour obtenir le chemin de votre application. Il apparaîtra comme ça sur iPhone:

/var/mobile/Applications/{GUID}/{appname}.app/www/index.html

Et ceci sur Android:

/android_asset/www/index.html

/index.html file:// /index.html , précisez le file:// , et ajoutez votre chemin relatif Sounds/sound.mp3 .

Voici quelque chose pour vous aider à démarrer:

Demo: http://jsfiddle.net/ThinkingStiff/chNVY/

Code:

 function getPhoneGapPath() { var path = window.location.pathname; path = path.substr( 0, path.length - 10 ); return 'file://' + path; }; var resource = getPhoneGapPath() + 'Sounds/sound.mps'; 

La meilleure réponse est obsolète. Vous êtes maintenant en mesure de jouer aux formats wav , mp3 et caf sur iOS en utilisant cette méthode "parcours relatif":

 var media = new Media('beep.wav', ...); 

Notez que le code ci-dessus requiert que le fichier son soit dans la racine de votre répertoire www/ dans cet exemple sur www/beep.wav . Si vous souhaitez les mettre dans une sous-directive comme www/sounds/ , vous devrez le spécifier en utilisant un chemin relatif à votre répertoire www/ . Par exemple, cela fonctionne aussi maintenant:

 var media = new Media('sounds/beep.wav', ...); 

Pour le fichier son à www/sounds/beep.wav .

Mieux vaut essayer de prendre en compte tout code de l'API de l'historique HTML5 qui pourrait ajouter dans les entrées de l'historique avec les répertoires ("/"):

 function get_phonegap_path () { var path = window.location.pathname return path.slice(0, path.indexOf("/www/") + 5) } 

J'ai eu le même problème et toutes les réponses sur les chemins de fichiers ne fonctionnaient pas pour moi à l'aide de l'application Phone Gap Developer . Le problème consistait à ce que l'application Developer n'engageait pas physiquement les fichiers sur le périphérique, ce qui empêchait d'y accéder de quelque manière que ce soit.

Le plugin Media fonctionnait comme prévu

$ Phonegap exécutez Android

$ Phonegap run ios

Avec ce code js:

 function getPhoneGapPath() { var path = window.location.pathname; var phoneGapPath = path.substring(0, path.lastIndexOf('/') + 1); return phoneGapPath; } var sound = new Media(getPhoneGapPath()+"assets/sounds/sound.mp3" //... sound.play();