描述Android系统在视频播放时来电话的解决方案

来源:互联网 发布:python源码剖析 编辑:程序博客网 时间:2024/06/06 00:20
1.当来电后返回后,只有声音,没有画面时,是因为当前activity对象被遮挡后,SurfaceView对象被销毁,而activity重新显示时他的重建晚于onResume()方法的执行。

此时应解决SurfaceView的重建问题:

private final class SurfaceCallback implements Callback{ 

public void surfaceCreated(SurfaceHolder holder) { 
if(position >0 && videoFile != null){ 
try { 
playVideo(videoFile); 
Log.i(TAG,"position="+ position); 
mediaPlayer.seekTo(position); 
position = 0; 
} catch (IOException e) { 
Log.e(TAG,e.toString()); 


Log.i(TAG, "surfaceCreated"); 


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



public void surfaceDestroyed(SurfaceHolder holder) { 
if(mediaPlayer != null && mediaPlayer.isPlaying()){ 
position = mediaPlayer.getCurrentPosition(); 
mediaPlayer.stop(); 

Log.i(TAG, "surfaceDestroyed"); 




为SurfaceView对象添加Callback对象

holder.addCallback(new SurfaceCallback()); 

2.解决内存不足时应用被杀死问题(应用程序如处于后台,且系统需要内存时会把应用杀死,此时回到播放器界面,需要重新调用onCreate()方法):

protected void onRestoreInstanceState(Bundle savedInstanceState) { 
position = savedInstanceState.getInt("position"); 
String fn = savedInstanceState.getString("fileName"); 
if(fn!=null){ 
videoFile = new File(Environment.getExternalStorageDirectory(),fn); 


super.onRestoreInstanceState(savedInstanceState); 


protected void onSaveInstanceState(Bundle outState) { 
outState.putInt("position", position); 
outState.putString("fileName", videoFile.getName()); 
super.onSaveInstanceState(outState); 
0 0
原创粉丝点击