마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Mideaplayer 의 OnCompletionListener() 동작문제 질문드립니다.

0 추천

잘라져있는 음성을 조합하여 한 문장처럼 재생되도록 작성하였습니다.

헌데. 이클립스를 새로운 버젼으로 설치후 제대로 동작을 안하는것인지..

안드로이드 버젼 4.0 이상에서는 조합한 음성이 한문장 처럼 나옵니다.

하지만, 안드로이드 버젼 3.1 에서는 음성이 끝나기도 전에 다음 음성이 나오는 문제가 발생했습니다.

OnCompletionListener() 리스너가 제대로 동작을 못하는 것 같은데요.

도움 부탁드립니다.

 


	public void Init(Handler _handler){
		arSoundList = new ArrayList<String>();
		
		m_player = new MediaPlayer();
		m_player.setOnCompletionListener(onListener);
		m_player.setVolume(1.0f, 1.0f);
		m_player.setLooping(false);
	}
	
	public void Play(String Path){
		String fullPath;
		fullPath = Environment.getExternalStorageDirectory().getPath();
		
		if(m_player.isPlaying()){
			arSoundList.add(Path);
		}else{
			try {
				m_player.setDataSource(fullPath + Path);
				m_player.prepare();
				m_player.start();
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (IllegalStateException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}	
		}
	}
	
	public OnCompletionListener onListener = new OnCompletionListener() {
		public void onCompletion(MediaPlayer mp) {
			m_player.reset();
			if(!arSoundList.isEmpty()){
				Play(arSoundList.get(0));
				arSoundList.remove(0);
			}
		}
	};

 

 

noransmile (120 포인트) 님이 2014년 2월 28일 질문

1개의 답변

0 추천

글세요.. 보통은 되어야 할텐데.. 3.1의 경우 구글도 버린버젼이라..

아무튼 처음 소리만 단독으로 3.1에서 돌렸을 때 끝까지 나오나요?

안드로이드 소스 코드 보면 onError가 발생했을 때도 onComplete를 호출을 하게 되어 있는데, 파일의 뒷 부분을 잘 처리 못해서 onError가 먼저 발생해 재생하다 다음 파일로 넘어갔을 가능성이 있을 듯 한데. 확인 해 보시길 권장합니다.

 

사악미소 (65,330 포인트) 님이 2014년 2월 28일 답변
...