編輯:關於Android編程
上一篇講到了使用意圖錄音,這篇文章將使用MediaRecorder類來錄音,從而提供更多的靈活性。
效果圖:
源代碼奉上:<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGJyPgo8L3A+CjxwPjwvcD4KPHByZSBjbGFzcz0="brush:java;">
package com.multimediademo9mediarecorder; import java.io.File; import android.app.Activity; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity implements OnClickListener, OnCompletionListener { private TextView statusTextView; private Button button_startRecording, button_stopRecording, button_playRecording, button_finish; private MediaRecorder recorder; private MediaPlayer player; private File audioFile; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } /** * 實例化組件 */ private void init() { statusTextView = (TextView) findViewById(R.id.statusTextView); // 當運行Activity時,將statusTextView的文本設置為“Ready”。 statusTextView.setText("Ready"); button_startRecording = (Button) findViewById(R.id.button_startRecording); button_playRecording = (Button) findViewById(R.id.button_playRecording); button_stopRecording = (Button) findViewById(R.id.button_stopRecording); button_finish = (Button) findViewById(R.id.button_finish); button_startRecording.setOnClickListener(this); button_playRecording.setOnClickListener(this); button_stopRecording.setOnClickListener(this); button_finish.setOnClickListener(this); button_playRecording.setEnabled(false); button_stopRecording.setEnabled(false); player = new MediaPlayer(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button_startRecording: try { /** * 當點擊開始錄音按鈕時,將構造一個新的MediaRecorder,並調用setAudioSource、 * setOutputFormat和setAudioEncoder方法。 */ recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); /** * 然後在SD卡上創建一個新的File對象,並調用MediaRecorder對象上的setOutputFile方法。 */ File path = new File(Environment.getExternalStorageDirectory() .getAbsoluteFile() + "/files/"); path.mkdir(); audioFile = File.createTempFile("recording", ".3gp", path); recorder.setOutputFile(audioFile.getAbsolutePath()); /** * 調用MediaRecorder上的prepare方法,並開始錄制。 */ recorder.prepare(); recorder.start(); /** * 最後更新statusTextView,並且更改那些按鈕會被啟用或禁用。 */ statusTextView.setText("Recording"); button_playRecording.setEnabled(false); button_stopRecording.setEnabled(true); button_startRecording.setEnabled(false); } catch (Exception e) { e.printStackTrace(); } break; case R.id.button_playRecording: /** * 播放錄音,使用MediaPlayer構造的對象player */ player.start(); statusTextView.setText("playing"); button_playRecording.setEnabled(false); button_stopRecording.setEnabled(false); button_startRecording.setEnabled(false); break; case R.id.button_stopRecording: /** * 停止錄制,並釋放MediaRecorder對象。 */ try { recorder.stop(); recorder.release(); player.setOnCompletionListener(this); player.setDataSource(audioFile.getAbsolutePath()); player.prepare(); statusTextView.setText("Ready to Play!!"); button_playRecording.setEnabled(true); button_stopRecording.setEnabled(false); button_stopRecording.setEnabled(false); } catch (Exception e) { e.printStackTrace(); } break; case R.id.button_finish: finish(); break; default: break; } } @Override public void onCompletion(MediaPlayer mp) { button_playRecording.setEnabled(true); button_startRecording.setEnabled(true); button_stopRecording.setEnabled(false); statusTextView.setText("Ready..."); } }
點擊下載源碼
1. Fragment概述Fragment從Android v3.0版本開始引入隨著界面布局的復雜化,處理起來也更加的復雜,引入Fragment可以把activity拆分
picasso是Square公司開源的一個Android圖形緩存庫,地址http://square.github.io/picasso/,可以實現圖片下載和緩存功能。
本篇文章介紹:如何使用Toolbar;自定義Toolbar;先來看一看效果,了解一下toolbar;布局文件:<android.support.v7.widget.
本文代碼以MTK平台Android 4.4為分析對象,與Google原生AOSP有些許差異,請讀者知悉。 本文主要介紹sim卡數據的讀取過程,當射頻狀態處於