0

Android mediaplayer を拡張するクラスを書きました。クラスは次のとおりです。

package it.ccevas.ccevasandroid;

import java.io.IOException;

import android.media.AudioManager;
import android.media.MediaPlayer;

public class MyMediaPlayer extends MediaPlayer {

public MyMediaPlayer(){
    super();

    setOnPreparedListener(new OnPreparedListener() {

        public void onPrepared(MediaPlayer mp) {
            start();
        }
    });

    setOnErrorListener(new OnErrorListener() {


        @Override
        public boolean onError(MediaPlayer mp, int what, int extra) {
             if (what == -38){
                 return true;
             }
             return false;
        }
    });
}

public boolean changeSource (String urlfile){
    try{
        reset();
        setAudioStreamType(AudioManager.STREAM_MUSIC);
        setDataSource(urlfile);
        prepare();      
        seekTo(0);
     }  catch (IllegalArgumentException e1) {
        e1.printStackTrace();
     } catch (SecurityException e1) {
        e1.printStackTrace();
     } catch (IllegalStateException e1) {
        e1.printStackTrace();
     } catch (IOException e1) {
        e1.printStackTrace();
    }
    start();
    return true;        
}

}

Android 4.xで正常に動作します

しかし、Android 2.x では、SD に保存されたファイルでのみ機能し、リモート ファイル (" http://www.something.com/myfile.mp3 "など) では機能しません。

マニフェストの許可は正しいです:

<uses-permission android:name="android.permission.INTERNET"/>

これは次のlog.catとおりです。

05-03 10:15:06.699: E/MediaPlayer(414): Attempt to call getDuration without a valid mediaplayer
05-03 10:15:06.699: E/MediaPlayer(414): error (-38, 0)
05-03 10:15:06.699: E/MediaPlayer(414): error (1, -2147483648)
05-03 10:15:06.789: E/MediaPlayer(414): Error (-38,0)
05-03 10:15:57.991: E/MediaPlayer(414): Error (1,-2147483648)
4

1 に答える 1

0

「 http://www.something.com/myfile.mp3 」の代わりに新しいURLを試してください。このURLはサーバーから準備されていないためです。

于 2013-05-04T12:16:50.523 に答える