prepareAsycn()的非法国家异常

时间:2018-07-15 08:50:31

标签: android

我当前正在制作一个视频播放器应用程序,用户可以在其中获取其外部存储中所有视频的列表,并且在单击时会加载一个新活动。我正在使用以下代码:

private void initialiseMediaPlayer() {
        try {
            mMediaPlayer=new MediaPlayer();
            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mMediaPlayer.setOnPreparedListener(this);
            mMediaPlayer.setOnVideoSizeChangedListener(this);
            mMediaPlayer.setOnCompletionListener(this);
            mMediaPlayer.setOnBufferingUpdateListener(this);
            mMediaPlayer.setScreenOnWhilePlaying(true);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        }

onCreate()中调用此方法:

@Override
    protected void onResume() {
        super.onResume();
        Intent intentStarted = getIntent();
        if(intentStarted.hasExtra(Intent.EXTRA_TEXT)) {
            Uri uri = Uri.parse(intentStarted.getStringExtra(Intent.EXTRA_TEXT));
           try{ mMediaPlayer.setDataSource(this,uri);}
           catch (IOException e) {
                e.printStackTrace();
            }
            finally {
               mMediaPlayer.prepareAsync();
           }
        }
    }

我从doc中读取的内容是newMediaplayer()处于空闲状态,并且setDataSource()将其传输到初始化状态。 prepareAsync()将其转移到准备状态,因此上述代码必须有效。 我也尝试使用以下代码,但发生了相同的事情:

@Override
    public void surfaceCreated(SurfaceHolder holder) {
        mMediaPlayer.setDisplay(holder);
        mMediaPlayer.prepareAsync();
        mVideoSurface.adjustSize(getDeviceWidth(this),getDeviceHeight(this),mVideoSurface.getWidth(), mVideoSurface.getHeight());
    }

0 个答案:

没有答案