Android播放默认点击声后,MediaPlayer停止

时间:2014-06-20 08:12:28

标签: java android audio android-mediaplayer

我在我的应用中实现了简单的MediaPlayer播放机制。我不确定这可能是问题的原因,但是当我将项目升级到最新的API(目前为19)时,一切似乎都很好。 因此:当我点击我的应用程序中的按钮时,文件播放正常启动并突然停止(这会导致标准'点击声音播放)。我为我的MediaPlayer设置OnCompletionListener,并在点击声音后触发,我的MediaPlayer作为参数。

private void startNewTrack(int which){
        stopTrack();
        try {
            if (mp == null) {
                mp = new MediaPlayer();
                //mp.setOnCompletionListener(this);
                mp.setOnErrorListener(this);
            }
            MediaMetadataRetriever meta = new MediaMetadataRetriever();
            meta.setDataSource(playlist[which].getPath());
            String titleString = meta.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
            if (titleString == null)
                titleString = playlist[which].getName();
            title.setText(titleString);
            album.setText(meta.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM));
            artist.setText(meta.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST));
            try {
                byte[] pic = meta.getEmbeddedPicture();
                if (pic == null)
                    cover.setImageResource(R.drawable.albumart_mp_unknown);
                else
                    cover.setImageBitmap(BitmapFactory.decodeByteArray(pic, 0, pic.length));
            } catch (Exception e) {
                cover.setImageResource(R.drawable.albumart_mp_unknown);
            }
            mp.setDataSource(playlist[which].getPath());
            mp.prepare();
            seek.setMax(mp.getDuration() / 1000);
            mp.start();
            while (playerThread != null)
                Thread.sleep(5);
            playerThread = new Thread(new Runnable() {
                @Override
                public void run(){
                    while (mp != null && !isInErrorState) {
                        try {
                            if (!isSeeking && mp.isPlaying()) {
                                final int pos = getCurrentPosition() / 1000;
                                MusicPlayback.this.post(new Runnable() {
                                    @Override
                                    public void run(){
                                        seek.setProgress(pos);
                                    }
                                });
                            }
                            Thread.sleep(500);
                        } catch (Exception e) {
                        }
                    }
                }
            });
            playerThread.start();
            play.setImageResource(R.drawable.pause);
        } catch (Exception e) {
            errorMessage();
        }
    }

我的onCompletion方法在release()上调用MediaPlayer。我暂时评论了它,但它没有改变任何东西。

所以问题是:为什么我的MediaPlayer会在其他声音播放完毕后停止?它有时甚至会挂起整个应用程序。

0 个答案:

没有答案