iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 19
0
 // 在錄音過程中顯示麥克風音量
    private class MicLevelTask extends AsyncTask<Void, Void, Void> {
        @Override
        protected Void doInBackground(Void... args) {
            while (isRecording) {
                publishProgress();

                try {
                    Thread.sleep(200);
                }
                catch (InterruptedException e) {
                    Log.d("RecordActivity", e.toString());
                }
            }

            return null;
        }

        @Override
        protected void onProgressUpdate(Void... values) {
            record_volumn.setProgress((int) myRecoder.getAmplitudeEMA());
        }

    }
  • 錄音時,想隨時掌握音量大小,所以使用異步處理MicLevelTask,判斷如果錄音時,publishProgress,給使用者變更的資訊,doInBackground實際要執行的程式碼就是寫在這裡。
  • AsyncTask 必須在 UI 主執行緒載入。
  • 必須在 UI 主執行緒建立 AsyncTask。
  • 必須在 UI 主執行緒呼叫 AsyncTask.execute(),就是拿來用拉。
  • 不要自行呼叫 onPreExecute(),onPostExecute(),doInBackground()onProgressUpdate()。
  • AsyncTask 僅只能執行一次,這點很重要。

再來則是創建一個PlayActivity,用來播放的。

裡面主要用到MediaPlayer這個元件,所以先宣告他。

 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_play2);

        Intent intent = getIntent();
        String fileName = intent.getStringExtra("fileName");

        // 建立指定資源的MediaPlayer物件
        Uri uri = Uri.parse(fileName);
        mediaPlayer = MediaPlayer.create(this, uri);
    }
 public void onSubmit(View view) {
        // 結束Activity元件
        finish();
    }
  • 按下確定後關閉。
public void clickPlay(View view) {
        mediaPlayer.start();
    }
  • 開始播放
public void clickPause(View view) {
        mediaPlayer.pause();
    }
  • 暫停播放
public void clickStop(View view) {
        if (mediaPlayer.isPlaying()) {
            mediaPlayer.stop();
        }

        // 回到開始的位置
        mediaPlayer.seekTo(0);
    }
  • 停止播放,並且歸0。
  @Override
    protected void onStop() {
        if (mediaPlayer.isPlaying()) {
            // 停止播放
            mediaPlayer.stop();
        }

        // 清除MediaPlayer物件
        mediaPlayer.release();
        super.onStop();
    }
  • 生命週期中的onStop,如果跳出去中正在播放,就會停止播放並且清除。

上一篇
[Day18]MediaRecorder
下一篇
[DAY20]GoogleMap
系列文
Java 與 Kotlin 入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言