2012-02-15 3 views
3

私はビデオプレーヤーを作っています。アプリを実行すると、コードの下の が機能しています。 ホームキーをクリックしてアクティビティに戻ってきたら、音が聞こえてきてもビデオは消えてしまいます。 私はそれが表面ビューのbecuzがdestoryedだと思う。restart()を実行したときにビデオ再生のためにsurfaceviewを再作成する方法は?

私はserfaceViewを再作成するためにいくつかの方法を試しましたが、うまくいきませんでした。音が出てくるたびに

私のコードを参照してください~~!

私は現在、カスタムUIを作成しています。だから私はvideoviewとmediacontrollerを使用することはできません。 MediaPlayerの場合のみご提案ください。

ありがとうございます!

public class AndroidVideoPlayerActivity extends Activity implements SurfaceHolder.Callback{ 
SurfaceView surface; 
SurfaceHolder sh; 
MediaPlayer mp; 
String web_video = "http://xxx.mp4"; //some address 
Button startB, stopB; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    startB = (Button)findViewById(R.id.startB); 
    stopB = (Button)findViewById(R.id.stopB); 
    surface = (SurfaceView)findViewById(R.id.surfaceView1); 
    sh = surface.getHolder(); 
    sh.addCallback(this); 
    sh.setFixedSize(400, 300); 
    sh.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

    mp = new MediaPlayer(); 
    mp.setDisplay(surface.getHolder()); 



    startB.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      playVideo(); 
     } 
    }); 

    stopB.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      stopVideo(); 
     } 
    }); 

}//onCreate 

@Override 
protected void onPause() { 
    super.onPause(); 
    mp.pause(); 
} 

@Override 
protected void onRestart() { 
    super.onRestart(); 
    mp.start(); 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    mp.stop(); 
    mp.release(); 
    mp = null; 
} 

private void playVideo(){ 
    try{ 
     mp.setDataSource(web_video); 
     mp.prepare(); 
     mp.start(); 

    }catch(Exception e){ 
     Log.d("ERROR", e+""); 
    } 



} 

private void stopVideo(){ 
    mp.stop(); 
    mp.release(); 
    mp = null; 
} 

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, 
     int height) { 
} 

@Override 
public void surfaceCreated(SurfaceHolder holder) { 

} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 
} 

}

答えて

1

私は自分自身に答えます。

私はsurfaceCreatedに2行を入れていました。

public void surfaceCreated(SurfaceHolder holder) { 
    if(mp == null)mp = new MediaPlayer(); 
    mp.setDisplay(holder); 

} 
関連する問題