描述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); 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章