web-dev-qa-db-ja.com

電話ギャップでローカルサウンドを再生する

.wavファイルをwwwフォルダに入れます。次のコードでjQueryを使用しています。アラートは鳴りますが、音は鳴りません。私は何か間違ったことをしていますか?

<script type="text/javascript" charset="utf-8" src="phonegap-0.9.2.js"></script> 
<script type="text/javascript" charset="utf-8" src="jquery.js"></script> 


<script type="text/javascript" charset="utf-8">

$(document).ready(function () {
    window.alert("READY!");
    document.addEventListener("deviceready", onDeviceReady, true);

    function onDeviceReady(){
        window.alert("OK@!");
        var snd = new Media("test.wav");
        snd.play();
    }
});

</script> 

音が出ない。

28
james

絶対ローカルパスを指定してください。例えば。

新しいメディア( "/Android_asset/www/test.wav");

Androidで動作するはずです。うまくいけば、クロスデバイスサポートのバグのようなものとして、PhoneGapでこれを修正するでしょう。

32
Ben Winters

window.location.pathnameを使用して、任意のPhoneGapアプリでアプリケーションのパスを取得できます。そうすれば、Android用にハードコードする必要はありません。 iPhoneでは次のようになります。

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

そしてこれはAndroid上で:

/Android_asset/www/index.html

/index.htmlを削除し、先頭にfile://を追加して、ファイルtest.wavを追加します。

デモ: http://jsfiddle.net/ThinkingStiff/r7eay/

コード:

function getPhoneGapPath() {

    var path = window.location.pathname;
    path = path.substr( path, path.length - 10 );
    return 'file://' + path;

};

var snd = new Media( getPhoneGapPath() + 'test.wav' );
49
ThinkingStiff

GetPhonegapPathの別のバージョンがあります。Androidを使用しているときに検出されます。

function getPhoneGapPath() {
   var path = window.location.pathname;
   path = path.substr( path, path.length - 10 );
   var devicePlatform = device.platform;
   if(devicePlatform=="Android"){
    path = 'file://'+path;
   }
   return path;
};
1