0

我的布局 xml 文件显示如下:

Song1    playbutton
Song2    playbutton
Song3     playbutton

当用户点击 Song1 播放按钮时,我需要播放 Song1,如果用户点击 Song2 播放按钮,我需要在中间检查 Song2 和 Song3 mediapalyer 实例

我收到 IllegalStateException 和有时 NullPointerException 如何检查,有人可以帮忙吗?

这是我的代码:

MediaPlayer mp1=new MediaPlayer();
MediaPlayer mp2=new MediaPlayer();

playbtn.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                if(mp2!=null){
                if(mp2.isPlaying()){
                    mp2.stop();
                    mp2.release();
                    mp2=null;

                    play20.setVisibility(View.VISIBLE);




                }
                }
                playbtn.setVisibility(View.INVISIBLE);
                pausebtn.setVisibility(View.VISIBLE);

                try {

                    Log.d("Start Media Player", "Start Media Player");
                    AssetFileDescriptor descriptor = MediaActivity.this
                            .getApplicationContext().getAssets()
                            .openFd("volumc.mp3");
                    mp1.setDataSource(descriptor.getFileDescriptor(),
                            descriptor.getStartOffset(), descriptor.getLength());
                    // descriptor.close();
                    mp1.prepare();
                    mp1.setLooping(true);
                    mp1.start();


                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });

        pausebtn.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {

                Log.d("pausebtn", "pausebtn");
                playbtn.setVisibility(View.VISIBLE);
                pausebtn.setVisibility(View.INVISIBLE);

                mp1.stop();
                mp1.release();
                mp1=null;


            }
        });

        // 20

        play20.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {

                if(mp1!=null){
                if(mp1.isPlaying()){
                    mp1.stop();
                    mp1.release();
                    mp1=null;
                    playbtn.setVisibility(View.VISIBLE);



                }
                }
                play20.setVisibility(View.INVISIBLE);
                pause20.setVisibility(View.VISIBLE);

                try {

                    Log.d("Start Media Player", "Start Media Player");
                    AssetFileDescriptor descriptor = MediaActivity.this
                            .getApplicationContext().getAssets()
                            .openFd("volumc.mp3");
                    mp2.setDataSource(descriptor.getFileDescriptor(),
                            descriptor.getStartOffset(), descriptor.getLength());
                    // descriptor.close();
                    mp2.prepare();
                    mp2.setLooping(true);
                    mp2.start();

                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                } catch (IllegalStateException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });

        pause20.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {

                Log.d("pausebtn", "pausebtn");
                play20.setVisibility(View.VISIBLE);
                pause20.setVisibility(View.INVISIBLE);

                mp2.stop();
                mp2.release();


            }
        });
4

1 回答 1

1

不要每个按钮使用一个 Mediaplayer 实例。创建许多实例不会受益。而是只创建一个媒体播放器实例并检查音乐是否正在播放。
您总是可以制作一种方法来停止播放媒体播放器,例如

private void stopAndStartMediaPlayer(String datasource)
{
    if(mp.isPlaying())
        mp.stop();
    mp.reset();
    mp.setDataSource(datasource);
    mp.prepare();
    mp.start();
}   
于 2013-10-20T06:21:53.193 回答