Android中的Media Player类实现场景

时间:2015-03-29 15:58:04

标签: android

过去三周我一直在安装Android媒体播放器。我正在尝试找到一种解决方案,让我可以让我的媒体播放器在播放歌曲时更改歌曲。

以下是Listener

上的RecyclerView
    musicList.addOnItemTouchListener(
            new RecyclerItemClickListener(getApplicationContext(), new RecyclerItemClickListener.OnItemClickListener() {
                @Override
                public void onItemClick(View view, final int position) {

                    currentPosition = position;

                    if(!mediaPlayer.isPlaying()){
                        musicThread.start();
                    } else {
                        mediaPlayer.reset();

                    }

                }
            })
    );
}

我的Thread是这样的:

    final Thread musicThread = new Thread(new Runnable(){
        @Override
        public void run() {

            try {
                URL = getMusicURL(myDataset[currentPosition]);

                try {
                    mediaPlayer.setDataSource(URL);
                    //mediaPlayer.prepare(); // might take long! (for buffering, etc)
                    mediaPlayer.prepareAsync(); // prepare async to not block main thread
                } catch (IOException e) {
                    e.printStackTrace();
                    Log.i("TEST","Eroare: "+e.getMessage());
                }
            } catch (StorageApiException e) {
                e.printStackTrace();
                Log.i("TEST","Eroare: "+e.getMessage());
            }

        }
    });

1 个答案:

答案 0 :(得分:1)

我觉得你有一团糟。首先,你不需要一个线程来播放音乐,当你拨打mediaPlayer.start()时,自己的媒体播放器API会为你做。但是,如果您要播放在线音乐,则必须关注准备数据源所需的时间。为此,只需使用mediaPlayer.prepareAsync()并注册回调即可。完成准备后,您可以自动开始播放或做任何您想做的事情。 如果要更改数据源,只需按照MediaPlayer文档中的自动机映射进行操作即可。基本上,当用户选择另一个曲目时,您在按钮监听器中注册该呼叫,然后重置mediaPlayer,并再次调用所有准备,开始...循环。顺便说一下,建议将所有媒体播放器代码部署到服务中,以便即使用户已关闭您的活动,它也可以继续播放。