0

ASSETS フォルダーにトラックがあるメディア プレーヤーがあり、各曲の開始/停止ボタンを作成したいと考えています。再生できますが、ボタンをもう一度クリックしても音楽は停止せず、最初の音楽を停止せずに別の音楽を開始します:s.

ここに私が今使っているコードがあります:

        public void onClick(View v) {   

        try {
            AssetFileDescriptor afd = getAssets().openFd("4.mp3");
            player = new MediaPlayer();
            player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
            player.prepare();
            if(player.isPlaying()){
                player.stop();
            } else {
                player.start();
            }
            } 
        catch (IllegalArgumentException e) {    } 
        catch (IllegalStateException e) { } 
        catch (IOException e) { }

    }

編集1:

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    player = new MediaPlayer();

    TextView sound4 = (TextView) findViewById(R.id.cancionCuatro);
    sound4.setOnClickListener(soundFour);

    try {
        AssetFileDescriptor afd = getAssets().openFd("4.mp3");
        player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
        player.prepare();
        } 
    catch (IllegalArgumentException e) {    } 
    catch (IllegalStateException e) { } 
    catch (IOException e) { }

}

OnClickListener soundFour = new OnClickListener() {

    public void onClick(View v) {   

        if(player.isPlaying()){
            player.stop();
        } else {
            player.start();
        }


    }
};      

LogCat: 状態 0 エラーで呼び出された開始 (-38 , 0)

4

2 に答える 2

0
try {if(player.isPlaying()){player.stop();} else {player.start();}if(player!=null) player.release();AssetFileDescriptor afd = getAssets().openFd("4.mp3");player = new MediaPlayer();player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());player.prepare(); } catch (IllegalArgumentException e) {} catch (IllegalStateException e) {} catch (IOException e) { }
于 2014-02-11T06:42:13.023 に答える
0

それはあなたの召命だからです

player = new MediaPlayer();

これは、同じものを参照するのではなく、mediaPlayer の新しいインスタンスを作成して、何かが既に再生されていて、それを停止できるかどうかをテストしています。新しい MediaPlayer() を onClick の外に移動すると、それ自体が動作するはずです。

于 2013-01-22T00:08:36.210 に答える