2011-04-27 7 views
1

내 응용 프로그램에 활동 및 서비스 구성 요소가 있습니다.활동 및/또는 서비스

서비스가 표면 홀더가 필요한 SurfaceView 및 mediaplayer 인스턴스를 준비하도록 할 것입니다. 내 미디어는 비디오 파일입니다.

서비스 내에서 표면 뷰를 만들 수 있습니까?

내 서비스 구성 요소에서 다음

surface = (MySurfaceView) findViewById(R.id.surface);

를 호출 할 수 있습니까?

내가 그랬다면 플레이어 인스턴스의 setDisplay()surface.getHolder을 할당 할 수있었습니다.

전반적인 목표는 활동에서 명령 (재생, 중지, 찾기 등)을 실행하고 서비스가 미디어 플레이어 상태의 제어를 구현하도록하는 것입니다.

아마도 내 활동에 모든 것을 넣을 수는 있지만 기기를 회전하면 표면을 찢어서 다시 에 다시 만들고 싶지 않습니다. 따라서 여기 내 상황에 대한 서비스를 사용하여보고.

모든 아이디어 나 해결책을 높이 평가합니다.

감사합니다.

답변

1

당신은 동안, (사용자 인터페이스를 귀찮게하지 않습니다, 다른 스레드) 대신 서비스의 AsyncTask 구현을 사용, 그 doInBackground 방법에

  • 모든 배경 작업을 할 수
  • onPostExecute 메서드 (UI 스레드)에서 의 모든 UI 관련 작업을 수행 할 수 있습니다.


당신이 당신의 미디어 (GUI 프로세스에 의해 가능 중단없이) 백그라운드 스레드에서 재생 될 필요가 있기 때문에 업데이트는 Service 당신을위한 선택이 될 수 있습니다. 서비스를 시작하고 중지하고 제어하려면 Activity이 필요합니다.
이 디자인을 구현하는 방법은 MusicDroid Tutorial part 2을 확인하십시오.

이 작업에 서비스를 사용하는 것은 필수적인 것은 아니지만 @ CommonsWare의 솔루션은 매우 우아하고 편리합니다.
@CommonsWare's streaming video test applicationAudio/Video player sample은 서비스를 사용하지 않습니다.

+0

AsyncTask가 어떻게 도움이되는지 알지 못합니다. 미디어 플 레이어는 응용 프로그램의 전체 수명 동안 백그라운드에서 실행되어야합니다. –

+0

표면을 사용할 수없는 경우 MediaPlayer에서 오디오 만 재생합니다. 나는 당신이 날아 다니는 표면을 부착/분리/재 부착 할 수 있는지 확신 할 수 없지만 재생은 표면없이 잘 작동해야합니다. 즉, 플레이어는 플레이어를 서비스 상태로 놓을 수 있고 표면은 활동으로 관리 할 수 ​​있습니다. – inazaruk

+0

나는이 작업의 다른 구현을 안내하는 posts-with-와 함께 유용한 링크를 추가했습니다. – rekaszeru

관련 문제