1

PhoneGap (Cordova) を使用しており、単一のサウンド ファイルを再生してから、別のページに移動したときにリソースを適切に解放しようとしています。

これは私がサウンドファイルを再生する方法です

var my_media = null;

 function playAudio(src) {
        // Create Media object from src
        if(my_media == null){
            my_media = new Media(src, onSoundSuccess, onSoundError);
        }

        // Play audio
        my_media.play();
    }

    // Audio - onSuccess Callback
    //
    function onSoundSuccess() {
        console.log("Audio played");
    }

    // Audio - onError Callback 
    //
    function onSoundError(error) {
        console.log('sound error - code: '    + error.code);
        console.log('sound error - message: ' + error.message);
        if(my_media != null){
            my_media.release();
        }
    }

これは、ページから移動するときに呼び出すコードです

if(my_media != null){
        my_media.release();
    }

ただし、ページを離れてリソースを解放した後、logcat で常に次のエラーが発生します。

10-09 12:09:07.843: D/MediaPlayer(32246): release() in
10-09 12:09:07.853: D/MediaPlayer(32246): release() out
10-09 12:09:07.853: V/MediaRecorderJNI(32246): native_reset
10-09 12:09:07.853: V/MediaRecorderJNI(32246): getMediaRecorder E
10-09 12:09:07.853: V/MediaRecorderJNI(32246): process_media_recorder_call
10-09 12:09:07.853: V/MediaRecorderJNI(32246): release
10-09 12:09:07.863: V/MediaRecorderJNI(32246): setMediaRecorder E: mr = null
10-09 12:09:07.863: V/MediaRecorderJNI(32246): setMediaRecorder X
10-09 12:09:07.903: D/CordovaWebView(32246): >>> loadUrl(file:///android_asset/www/page.html)
10-09 12:09:07.903: D/CordovaWebView(32246): >>> loadUrlNow()

10-09 12:09:07.903: W/System.err(32246): java.net.SocketException: Socket closed
10-09 12:09:07.903: W/System.err(32246):    at org.apache.harmony.luni.platform.OSNetworkSystem.accept(Native Method)
10-09 12:09:07.903: W/System.err(32246):    at dalvik.system.BlockGuard$WrappedNetworkSystem.accept(BlockGuard.java:262)
10-09 12:09:07.903: W/System.err(32246):    at org.apache.harmony.luni.net.PlainSocketImpl.accept(PlainSocketImpl.java:95)
10-09 12:09:07.903: W/System.err(32246):    at java.net.ServerSocket.implAccept(ServerSocket.java:264)
10-09 12:09:07.903: W/System.err(32246):    at java.net.ServerSocket.accept(ServerSocket.java:150)
10-09 12:09:07.903: W/System.err(32246):    at org.apache.cordova.CallbackServer.run(CallbackServer.java:195)
10-09 12:09:07.903: W/System.err(32246):    at java.lang.Thread.run(Thread.java:1027)

明らかに私は何か間違ったことをしていますが、それが何であるかはわかりません。

エラーを解消するメディアオブジェクトを解放しないようにしましたが、アプリをしばらく使用すると、リソースが積み重なって適切に解放されないためにエラーが発生します。

どんな助けでも大歓迎です。

ありがとう

4

1 に答える 1

0

以下の URL のコードを試しましたか: https://gist.github.com/2380994 つまり、mp3 を www に配置し、Android で「/android_asset/www/test.mp3」をロードします。ここで動作します。

于 2013-01-19T14:23:10.553 に答える