2011-07-17 3 views
3

내 응용 프로그램의 하나의 활동으로 시작하는 비디오 스트림을 표시하려고하며 다시 시작하지 않고 응용 프로그램의 다른 활동으로 이동합니다. 그것을 준비하십시오. 활동 변경에 대한 약간의 일시 중지는 정상이지만 다시 시작하면 안됩니다. 한 활동에서 모든 것이 잘 작동하지만, 전환 활동을 할 때 MediaPlayer은 새로운 SurfaceHolder에 연결하고 싶지 않습니다. 오디오는 아름답게 작동하지만 간신히 장애가됩니다.실행중인 android.media.MediaPlayer가 응용 프로그램의 여러 활동에 걸쳐 유지되도록하기

난 애플 리케이션 컨텍스트로 초기화 SurfaceView의 하위 클래스를 통해 이것을 시도했습니다. (액티비티간에 응용 프로그램 컨텍스트 뷰를 다시 배치하는 것은 Button과 같은 단순한 뷰를 대신 사용하므로 문제가되지 않는다고 생각합니다.) 생성자에서 MediaPlayer 객체를 만들고 리스너와 데이터 소스 (MP4 HTTP를 통해 스트리밍 - 예, MediaPlayer의 일반적인 사용법으로 재생할 수 있음을 확인했습니다) prepareAsync으로 전화하십시오. 내 SurfaceHolder.CallbacksurfaceCreated 메서드에서 나는 이라고 setDisplay으로 전화하고 (플레이어가 준비를 마친 경우) 호출합니다. surfaceDestroyed 방법에서 나는 pause이라고 부른다. 그리고 준비 콜백에서 표면이 이미 생성 된 경우 start를 호출합니다.

나는 지금 무엇을 해야할지를 놓치고 있습니다. 어떤 아이디어?

+0

참고 : 나도 잘못 될 수있는 항목의 수를 줄이기 위해 로컬 비디오 파일을 사용해 보았습니다. 같은 결과. – Emdot

+0

오리엔테이션 변경을 통해 동영상을 계속 재생할 수있는 사람이 MediaPlayer 사용자 인 경우이 작업을 수행하는 데 필요한 정보가 포함되어있을 수 있습니다. 불행히도 그러한 온라인을 찾을 수 없었습니다. – Emdot

+0

당신은 내가 비슷한 종류의 문제가 있지만 다른 활동에서 볼 수없는 도움을 위해서 당신의 코드를 공유 할 수 있습니까? 여기는 내 러닝 코드 링크입니다 : http://stackoverflow.com/questions/7739386/android-how - 취득 - 미디어 플레이어 진행률 표시 줄 및 방법 표시 모두 표시 –

답변

0

더 쉬운 방법) (onpause 방법에있어서의 위치를 ​​저장하는 것입니다 :

public void onPause(){ 

    super.onPause(); 
    int pos = player.getCurrentPosition(); 
} 

다음 새 활동 호출 :

player.seekTo(pos); 

player.start(); 

그러나 밤은 매우 효율적입니다. 활동을 종료하고 돌아올 때 복원 할 때 동영상의 상태를 저장하는 것이 좋겠지 만 온라인과 같은 것을 찾을 수는 없습니다.

+0

일시 중지 및 다시 시작은 작업 전반에 걸쳐 단일 인스턴스를 유지하므로 정상적으로 작동합니다. 문제는 표면에 다시 부착하는 것입니다. – Emdot

관련 문제