3

次のものがあるとします (Android ApiDemos から)。

<?xml version="1.0" encoding="utf-8"?>

<SurfaceView android:id="@+id/surface"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center">
</SurfaceView>

MediaPlayer が SurfaceView を使用し、その release() が呼び出された後、SurfaceView を再利用できますか? SurfaceView を再利用するために MediaPlayer の新しいインスタンスを作成しようとしましたが、setDisplay() で次のエラーが発生します: java.lang.IllegalArgumentException: The surface has beenreleased

コードは次のようなものです。

    mPreview = (SurfaceView) findViewById(R.id.surface);
holder = mPreview.getHolder();
holder.addCallback(this);

mMediaPlayer = new MediaPlayer();
MediaPlayer.setDataSource(url);

mMediaPlayer.setDisplay(holder);
4

3 に答える 3

0

これを試して :

mPreview  = (SurfaceView) findViewById(R.id.PlaySurfaceView);
surfaceHolder = mPreview.getHolder();
surfaceHolder.addCallback(this);
try {
 mMediaPlayer = new MediaPlayer();
 mMediaPlayer.setDataSource(url);  
 mMediaPlayer.setDisplay(holder); 
 } catch (IllegalArgumentException e1) {
     e1.printStackTrace();
   } catch (SecurityException e1) {
     e1.printStackTrace();
   } catch (IllegalStateException e1) {
     e1.printStackTrace();
   } catch (IOException e1) {
     e1.printStackTrace();
   }
于 2012-04-08T05:17:45.190 に答える