Porgress栏在每个onClick上都运行得更快

时间:2017-10-19 04:45:31

标签: android dialog progress-bar mediarecorder android-mediarecorder

我试图制作一个简单的录音机。录音机的问题在于,每次进度条变快。它会在第一回合运行正常,但是如果你取消音频并希望第二次进行,它会变得更快。

        recordButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (recorder == null) {
                        recorder = new MediaRecorder();
                    }
                    stopped=false;
                    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                    recorder.setOutputFile("/sdcard/sample.3gp");
                    recorder.setMaxDuration(MAX_DURATION);

                    //Progressbar
                    pb.setMax(MAX_DURATION);
                    pb.setProgressTintList(ColorStateList.valueOf(Color.WHITE));

                    new CountDownTimer(MAX_DURATION, 250) {
                        public void onTick(long millisUntilFinished) {
                            pb.setProgress(pb.getProgress() + 250);
                        }
                        public void onFinish() {
                        }
                    }.start();

所有这些都发生在对话框中,因此如何清除对话框的内容以使进度条恢复其默认值。

1 个答案:

答案 0 :(得分:0)

    long timestamp = DateUtils.getCurrentTimeMillis();
    String imagePath = Environment.getExternalStorageDirectory() + "/testing/" + timestamp + "_D_FM_" + "John" + ".mp3";
    MediaRecorder mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_RECOGNITION); mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
                mRecorder.setOutputFile(imagePath);
                mRecorder.setAudioEncodingBitRate(16);
                mRecorder.setAudioSamplingRate(44100);
                mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
                // Starting record time
                recordTime = 0;
                // Show TextView that displays record time
                try {
                    mRecorder.prepare();
                    mRecorder.start();
                    // Change isRecroding flag to true
                    isRecording = true;
                    handler.post(UpdateRecordTime);
                } catch (IOException e) {
                    FRLog.e("LOG_TAG", "prepare failed", e);
                }

点击音频播放时:

private MediaPlayer mPlayer;

private void playAudio(final SeekBar audioSeekbar, int position, final ImageButton audioplayImgBtn, String fileName) {
        seekBar = audioSeekbar;
        if (audio_playing && audio_position == position) {
            if (isPaused) {
                mPlayer.start();
                handler.post(UpdatePlayTime);
                audioplayImgBtn.setImageResource(R.drawable.ic_pause);
                isPaused = false;
            } else {
                mPlayer.pause();
                audioplayImgBtn.setImageResource(R.drawable.ic_messages_audio_play);
                isPaused = true;
            }
        } else {
            if (audio_playing && audio_position != position) {
                mPlayer.pause();
                audioplayImgBtn.setImageResource(R.drawable.ic_messages_audio_play);
                isPaused = true;
            }
            audio_position = position;
            audioSeekbar.setProgress(0);
            audioplayImgBtn.setImageResource(R.drawable.ic_pause);
            if (mPlayer != null) {
                if (mPlayer.isPlaying()) {
                    mPlayer.stop();
                    mPlayer.reset();
                    mPlayer.release();
                    mPlayer = null;
                } else {
                    mPlayer.reset();
                    mPlayer.release();
                    mPlayer = null;
                }
            }
            mPlayer = new MediaPlayer();
            playTime = 0;
            handler = new Handler();
            // Reset max and progress of the SeekBar
            try {
                // Initialize the player and start playing the audio
                mPlayer.setDataSource(Environment.getExternalStorageDirectory() + "/testing/" + fileName);
                mPlayer.prepare();
                mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        audioSeekbar.setMax(mPlayer.getDuration());
                        mPlayer.start();
                        audio_playing = true;
                        handler.post(UpdatePlayTime);
                    }
                });

                mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mp) {
                        audioplayImgBtn.setImageResource(R.drawable.ic_messages_audio_play);
                        audioSeekbar.setProgress(0);
                        audio_playing = false;
                        handler.removeCallbacksAndMessages(null);
                    }
                });
                // Post the play progress
                // updated code by manikandan
                audioSeekbar.setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        if (mPlayer.isPlaying()) {
                            SeekBar sb = (SeekBar) v;
                            mPlayer.seekTo(sb.getProgress());
                        }
                        return false;
                    }
                });
                audioSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
                    @Override
                    public void onProgressChanged(SeekBar seekBar, int i, boolean fromUser) {
                        if (mPlayer != null && fromUser) {
                            mPlayer.seekTo(seekBar.getProgress());
                        }
                    }

                    @Override
                    public void onStartTrackingTouch(SeekBar seekBar) {

                    }

                    @Override
                    public void onStopTrackingTouch(SeekBar seekBar) {
                        if (mPlayer != null) {
                            if (mPlayer.isPlaying()) {
                                mPlayer.seekTo(seekBar.getProgress());
                            }
                        }
                    }
                });
            } catch (IOException e) {
                FRLog.e("LOG_TAG", "prepare failed", e);
            }
        }
    }




Runnable UpdatePlayTime = new Runnable() {
        public void run() {
            if (mPlayer != null) {
                if (mPlayer.isPlaying()) {
                    seekBar.setProgress(mPlayer.getCurrentPosition());
                    handler.postDelayed(this, 500);
                }
            }
        }
    };