간단 한 오디 오 재생 기능 MediaPlayer 사용 중 발생 하 는 구덩이 입 니 다.

2879 단어 android일상 총화
문제 1.오디 오 재생 완료 후 재생 완료 감청 리 셋
 public void onCompletion(MediaPlayer mp) {}

방법 은 두 번 갔다.
2.클릭 하여 다시 재생 시,신문
IllegalStateException

잘못
3.activity 를 소각 할 때 2 중의 오 류 를 보고 합 니 다.
 
우선 도구 류 의 일부 코드 를 붙 입 니 다.
//  
public static VoiceMediaPlayer getInstance(){
        if(instance==null){
            synchronized (VoiceMediaPlayer.class){
                if(instance==null){
                    instance=new VoiceMediaPlayer();
                }
            }
        }
        return instance;
    }


//   
 public void initMediaPlayer(){
        if(mediaPlayer==null){
            mediaPlayer=new MediaPlayer();
        }
        mediaPlayer.setVolume(1.0f,1.0f);
        mediaPlayer.setLooping(false);
    }


//    
 public void stopMediaPlayer(){
        mediaPlayer.stop();
        mediaPlayer.reset();
    }


//  
 public void play(final String path, final MediaPlayer.OnCompletionListener listener, final MediaPlayer.OnPreparedListener preparedListener){
        try{
            //mediaPlayer.reset();
            mediaPlayer.setDataSource(path);
            mediaPlayer.prepareAsync();
            mediaPlayer.setOnCompletionListener(listener);
            mediaPlayer.setOnPreparedListener(preparedListener);
        }catch (IOException e){
            e.printStackTrace();
        }

    }


//  
 public void destroyMediaPlayer(){
        try{
            if(mediaPlayer!=null){
                mediaPlayer.stop();
                //mediaPlayer.reset();
                mediaPlayer.release();
                mediaPlayer=null;
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

 
우선 첫 번 째 문제,재생 이 끝나 면 어떻게 두 번 의 리 셋 방법 을 사용 할 수 있 습 니까?
그것 은 내 가 리 셋 방법 인 onComletion 에서 재생 을 중단 하 는 방법 을 호출 한 것 이다.위의 코드 는 미디어 플레이어.reset 방법 을 호출 한 것 을 볼 수 있다.
이 방법의 역할 은 미디어 플레이어 대상 을 방금 만 든 상태 로 초기 화 하 는 것 입 니 다.(원본 코드 에서 재생 이 완 료 될 리 셋 방법 을 찾 지 못 했 습 니 다.)
우 리 는 말 그대로 분석 할 수 밖 에 없 었 다.재생 이 끝나 자마자 reset 방법 을 사용 하여 방금 상태,즉 재생 이 완 료 된 상 태 를 리 셋 하여 다시 한 번
재생 이 완 료 된 상 태 를 호출 했 습 니 다.
실천 적 으로 증명 되다.
두 번 째 질문,재생 완료 클릭 재 재생 왜 틀 렸 을 까?그 이 유 는 제 가 첫 번 째 문제 의 해결 을 바탕 으로 재생 이 완 료 된 후에 재생 정지 방법 을 다시 사용 하지 않 았 기 때 문 입 니 다.
재생 재생 재생 재생 방법 을 호출 할 때 미디어 플레이어 가 상 태 를 리 셋 하지 않 았 습 니까?아니면 이 reset()방법 이 항상 있 었 습 니까?따라서 상기 play 가 필요 합 니 다.
방법 안에 비동기 로드 를 준비 하기 전에 reset 방법 을 호출 합 니 다.
 
세 번 째 문 제 는 사실 이 reset 방법 입 니 다.매번 그것 입 니 다.귀 찮 습 니 다.
activity 가 소각 되 었 을 때 미디어 플레이 어 를 먼저 풀 어야 합 니 다.미디어 플레이어.release 가 풀 리 기 전에 미디어 플레이어 의 상 태 를 초기 화하 고 reset 방법 을 사용 해 야 합 니 다.
 
뒤의 두 문 제 는 모두 소스 코드 를 통 해 설명 되 고 간단 하 며 더 이상 소스 코드 를 군말 하지 않 는 다.
이상 의 문 제 는 모두 자신 이 개발 할 때 주의 하지 않 고 제3자 의 것 을 많이 사용 하 는 것 입 니 다.원생 으로 자신 이 쓸 때 그렇게 엄격하게 금지 하지 않 아서 생 긴 것 입 니 다.이 기록 으로 자신 을 격려 하고 화 이 팅!
다음 볼 륨 초점 문제.

좋은 웹페이지 즐겨찾기