安卓 - 媒体播放器下一个按钮不起作用



我正在使用实时流式广播Android应用程序...当我到达列表的末尾时,我有一个带有4个曲目的数组,假设下一个按钮将表示"最后一个"歌曲"但是没有崩溃,

这是按钮代码:

    counter=0;
    mediaPlayer=new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    btn_next.setOnClickListener(new View.OnClickListener(){
         @Override
         public void onClick(View v) {
             if (counter < songurl.length) {
                 counter = counter + 1;
                 textview.setText(songurl[counter]);
                 try {
                     mediaPlayer.reset();
                 } catch (Exception ex) {
                     try {
                         mediaPlayer.setDataSource(songurl[counter]);
                     } catch (IOException e) {
                         e.printStackTrace();
                     }
                     try {
                         mediaPlayer.prepare();
                     } catch (IOException e) {
                         e.printStackTrace();
                     }
                     mediaPlayer.start();
                 }
             } else {
                 Toast.makeText(MainActivity.this, "last song", Toast.LENGTH_SHORT).show();
             }
         }
    });

另一个问题...如果我想在应用程序到达最后一首歌时想让它成为一个封闭的循环,我想按下旁边,从一开始就启动列表?谢谢。

您只需在代码中添加一个Modulo(%)操作员

counter = counter++ % songurl.length

如果其他块,则无需添加额外的

btn_next.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v) {
        counter = counter++ % songurl.length
        textview.setText(songurl[counter]);
        try {
            mediaPlayer.reset();
        } catch (Exception ex) {
            try {
                mediaPlayer.setDataSource(songurl[counter]);
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                mediaPlayer.prepare();
            } catch (IOException e) {
                e.printStackTrace();
            }
            mediaPlayer.start();
        }
    }
});

您遇到的一个问题是,您在检查它在范围之内之后就会增加计数器,这意味着您的安全检查是没有用的。将counter = counter + 1;移至IF语句的末尾。

至于连续使其循环,您可以在IF语句主体末尾将其更改为counter = (counter + 1) % songurl.length;

除了您问的问题的范围之外,您对MediaPlayer的使用存在一些问题。在捕获语句中拥有这么多关键逻辑是没有意义的。这意味着您期望例外发生。您应该重新考虑您在那里做什么。

您在捕获块中看到您称为MediaPlayer.setDatasource(Songurl [Counter])。如果您致电MediaPlayer.Reset()

时,该怎么办

尝试以下操作:

try{
    mediaPlayer.reset();
    mediaPlayer.setDataSource();
    mediaPlayer.prepareAsync();--or mediaPlayer.prepare();
    (It depends on whether you load the url on the internet)
    mediaPlayer.start(); -- if you call mediaPlayer.prepareAsync() you should call mediaPlayer.start() at the OnPreparedListener;
 mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mediaPlayer) {
                mediaPlayer.start();
            }
        });
}

,如果您仍然想知道,我建议您阅读有关Mediaplay状态的信息。

PS如果Mediaplayer在玩,并且您想让它播放另一个,请拨打MediaPlayer.stop()first;

要使循环您应该检查onclicklistener,如果计数器等于songurl.length,我认为播放列表中的歌曲总数。

int counter=0;
    MediaPlayer mediaPlayer=new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    btn_next.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            if (counter < songurl.length) {
                counter = counter + 1;
                textview.setText(songurl[counter]);
                try {
                    mediaPlayer.reset();
                } catch (Exception ex) {
                    try {
                        mediaPlayer.setDataSource(songurl[counter]);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    try {
                        mediaPlayer.prepare();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    mediaPlayer.start();
                }
            } else if(counter == songurl.length) {
                counter = 0;
               // Toast.makeText(MainActivity.this, "last song", Toast.LENGTH_SHORT).show();
                textview.setText(songurl[counter]);
                try {
                    mediaPlayer.reset();
                } catch (Exception ex) {
                    try {
                        mediaPlayer.setDataSource(songurl[counter]);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    try {
                        mediaPlayer.prepare();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    mediaPlayer.start();
                }
            }
        }
    });

在Elseif条件下,我将计数器设置为0。

最新更新