編輯:關於Android編程
不多說,直接上代碼,有詳細注釋
MyAudioRecord.java
import java.io.File; import java.io.IOException; import android.app.Activity; import android.content.ContentValues; import android.content.Intent; import android.media.MediaPlayer; import android.media.MediaRecorder; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.view.View; import android.widget.Button; import android.widget.TextView; /** * 這個是利用MediaRecorder類來實現自己的音頻錄制程序 * * 為了可以錄制音頻我們需要RECORD_AUDIO權限 * 為了可以寫入SDCard,我們需要WRITE_EXTERNAL_STORAGE權限 * @author Administrator * */ public class MyAudioRecord extends Activity { private TextView stateView; private Button btnStart,btnStop,btnPlay,btnFinish; private MediaRecorder recorder; private MediaPlayer player; private File audioFile; private Uri fileUri; public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.my_audio_record); stateView = (TextView)this.findViewById(R.id.view_state); stateView.setText("准備開始"); btnStart = (Button)this.findViewById(R.id.btn_start); btnStop = (Button)this.findViewById(R.id.btn_stop); btnPlay = (Button)this.findViewById(R.id.btn_play); btnFinish = (Button)this.findViewById(R.id.btn_finish); btnStop.setEnabled(false); btnPlay.setEnabled(false); } public void onClick(View v){ int id = v.getId(); switch(id){ case R.id.btn_start: //開始錄制 //我們需要實例化一個MediaRecorder對象,然後進行相應的設置 recorder = new MediaRecorder(); //指定AudioSource 為MIC(Microphone audio source ),這是最長用的 recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//setAudioSource/setVedioSource //指定OutputFormat,我們選擇3gp格式 //其他格式,MPEG-4:這將指定錄制的文件為mpeg-4格式 //RAW_AMR:錄制原始文件,這只支持音頻錄制,同時要求音頻編碼為AMR_NB //THREE_GPP:錄制後文件是一個3gp文件,支持音頻和視頻錄制 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //指定Audio編碼方式,目前只有AMR_NB格式 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); //接下來我們需要指定錄制後文件的存儲路徑 File fpath = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/data/files/"); fpath.mkdirs();//創建文件夾 try { //創建臨時文件 audioFile = File.createTempFile("recording", ".3gp", fpath); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } recorder.setOutputFile(audioFile.getAbsolutePath()); //下面就開始錄制了 try { recorder.prepare(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } recorder.start(); stateView.setText("正在錄制"); btnStart.setEnabled(false); btnPlay.setEnabled(false); btnStop.setEnabled(true); break; case R.id.btn_stop: recorder.stop(); recorder.release(); //然後我們可以將我們的錄制文件存儲到MediaStore中 ContentValues values = new ContentValues(); values.put(MediaStore.Audio.Media.TITLE, "this is my first record-audio"); values.put(MediaStore.Audio.Media.DATE_ADDED, System.currentTimeMillis()); values.put(MediaStore.Audio.Media.DATA, audioFile.getAbsolutePath()); fileUri = this.getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values); //錄制結束後,我們實例化一個MediaPlayer對象,然後准備播放 player = new MediaPlayer(); player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer arg0) { //更新狀態 stateView.setText("准備錄制"); btnPlay.setEnabled(true); btnStart.setEnabled(true); btnStop.setEnabled(false); } }); //准備播放 try { player.setDataSource(audioFile.getAbsolutePath()); player.prepare(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //更新狀態 stateView.setText("准備播放"); btnPlay.setEnabled(true); btnStart.setEnabled(true); btnStop.setEnabled(false); break; case R.id.btn_play: //播放錄音 //注意,我們在錄音結束的時候,已經實例化了MediaPlayer,做好了播放的准備 player.start(); //更新狀態 stateView.setText("正在播放"); btnStart.setEnabled(false); btnStop.setEnabled(false); btnPlay.setEnabled(false); //在播放結束的時候也要更新狀態 break; case R.id.btn_finish: //完成錄制,返回錄制的音頻的Uri Intent intent = new Intent(); intent.setData(fileUri); this.setResult(RESULT_OK, intent); this.finish(); break; } } }AndroidManifest.xml
提供obtain()在obtain的所有重載方法中,第一行都是Message m = obtain();,即調用空參的方法。先來看一下這個空參方法public stati
概述前段時間,在用到新版(3.5.0版)百度地圖時,在地圖覆蓋物實現以及覆蓋物點擊事件的添加部分遇到點挫折,發現網上很多的資料寫得都不夠詳細,所以我就想寫一個有關從地圖定
相關文章android popwindow實現左側彈出菜單層http://www.jb51.net/article/33533.htm移動App設計的13大精髓http:
動畫在我們實際開發中占有很重要的地位,一個優秀的動畫能為我們的app應用增色很多,同時一個優秀的動畫銜接能夠增加我們app的邏輯展示。在Android系統中,系統給我們