2

メディア プレーヤーは、アイドル状態のまましばらくすると開始が遅れ、音声が再生されなくなります。

以前は を使用setDataSource()していましたが、今回は を使用しcreate()ます。

参考までに、これは私が使用しているコードです:

AssetFileDescriptor afd = _context.getResources().openRawResourceFd(this._soundResource.get(this._toBePlayed));
        mp = new MediaPlayer();
        mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
        afd.close();
        mp.setOnPreparedListener(new OnPreparedListener(){

            @Override
            public void onPrepared(MediaPlayer mp) {

                mp.start();
            }
        });
        mp.setOnCompletionListener(new OnCompletionListener(){

            @Override
            public void onCompletion(MediaPlayer mp) {

                mp.reset();
                mp.release();
            }
        });
        mp.prepareAsync();
4

3 に答える 3

1

start()の遅延の問題もありました。次のようにonPreparedのmp.seekTo(0)で修正しました。

mp.setOnPreparedListener(new OnPreparedListener(){
    @Override
    public void onPrepared(MediaPlayer mp) {
        mp.seekTo(0);
        mp.start();
    }
});
于 2016-03-27T16:55:47.387 に答える
0

FileInputStream を使用します。AudioStreamTypeを設定していません。MediaPlayer をセットアップする方法は次のとおりです。

   public void setupMediaPlayer(){
    mp = new MediaPlayer();
    mp.setAudioStreamType(AudioManager.STREAM_MUSIC);

    try {
        fis = new FileInputStream(tempFilePath);
        mp.setDataSource(fis.getFD());
        mp.prepare();
        mp.setOnPreparedListener(this);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

tempFilePathはファイルへのパスです。

また、このクラスにsetOnPreparedListenerを実装すると、私の意見では、コードがより読みやすくなります。

また、参照への素晴らしいリンク: MediaPlayer State Diagram

于 2013-08-01T09:24:46.160 に答える
-2

変わってくれたらと思います

mp.prepareAsync();

mp.prepare();

そして、置きます

mp.start();

mp.prepare();の後 あなたのコードは動作します。試してみる。

于 2013-08-01T09:37:27.230 に答える