web-dev-qa-db-ja.com

MediaPlayer.setDataSource()とprepare()が機能しない-android

MediaPlayerオブジェクトの使用に問題があり、あまり成功していません。サウンドアセットをrawフォルダーに追加し、R内のint値を使用して呼び出すと、正常に機能します。しかし、私はURLから物事を引き出すことができるようにしたいと思います。

私が読んだすべてのドキュメントによると、setDataSource()はファイルへのURLを含む文字列paramを受け入れる必要があります。

Prepare()ステートメントでIO例外が発生し続けます。ファイルをローカルにコピーしようとしましたが、まだサイコロがありません。

誰かアイデアはありますか?

MediaPlayer mp = new MediaPlayer();
try {
        mp.setDataSource("http://www.urltofile.com/file.mp3");
        mp.prepare();
        mp.start();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
17
Kyle

MediaPlayer.create()を試してください。また、プレーヤーが実際に準備ができた後でのみ開始することもできます。次に例を示します。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    MediaPlayer player = MediaPlayer.create(this, Uri.parse("http://www.urltofile.com/file.mp3"));
    player.setOnPreparedListener(new OnPreparedListener() { 
        @Override
        public void onPrepared(MediaPlayer mp) {
            mp.start();
        }
    });
}
22

ストリームの場合は、prepareAsync()を呼び出す必要があります。これは、十分なデータがバッファリングされるまでブロックするのではなく、すぐに戻ります。

13
Ihor DIM