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

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); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值