2012-02-15 51 views
3

我打算制作一个视频播放器。当我运行该应用程序时,下面的代码正在工作 。 但如果我点击home键并回到活动,声音即将到来,但视频消失了。 我认为这是表面视图的becuz是destoryed。如何在重新启动时重新创建用于视频播放的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,它的工作。

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

} 
相关问题