Android學習之路-錄音功能實現


---恢復內容開始---

  今天學習了安卓的錄音與播放,記錄,備忘。。

Xml代碼

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent" android:orientation="vertical"
 5     tools:context="${relativePackage}.${activityClass}" >
 6 
 7     <Button android:id="@+id/Startrecording"  android:layout_width="match_parent"
 8         android:layout_height="wrap_content" android:text="開始錄音"/>
 9     <Button android:id="@+id/stoptrecording"  android:layout_width="match_parent"
10         android:layout_height="wrap_content" android:text="結束錄音"/>
11     <Button android:id="@+id/Playtape"  android:layout_width="match_parent"
12         android:layout_height="wrap_content" android:text="播放錄音"/>
13 
14 
15 </LinearLayout>

布局非常簡單,主要是用來演示,下面是Java代碼

  1 package com.example.androidlulin;
  2 
  3 
  4 
  5 import java.io.File;
  6 import java.io.IOException;
  7 
  8 
  9 
 10 import android.app.Activity;
 11 import android.media.MediaPlayer;
 12 import android.media.MediaRecorder;
 13 import android.os.Bundle;
 14 import android.view.Menu;
 15 import android.view.MenuItem;
 16 import android.view.View;
 17 import android.view.View.OnClickListener;
 18 import android.widget.Button;
 19 import android.widget.Toast;
 20 
 21 public class MainActivity extends Activity implements OnClickListener {
 22     private Button Startrecording,stoptrecording,Playtape;
 23     private MediaRecorder  recorder;
 24     private MediaPlayer player;
 25     private String voicePath ;
 26     private long time;
 27     //private MediaPlayer player;
 28     
 29     @Override
 30     protected void onCreate(Bundle savedInstanceState) {
 31         super.onCreate(savedInstanceState);
 32         setContentView(R.layout.activity_main);
 33         //new一個實例
 34         player = new MediaPlayer();
 35         Startrecording = (Button) findViewById(R.id.Startrecording);
 36         stoptrecording = (Button) findViewById(R.id.stoptrecording);
 37         Playtape = (Button) findViewById(R.id.Playtape);
 38         //點擊事件
 39         Playtape.setOnClickListener(this);
 40         Startrecording.setOnClickListener(this);
 41         stoptrecording.setOnClickListener(this);
 42         
 43     }
 44 
 45     @Override
 46     public void onClick(View v) {
 47         switch (v.getId()) {
 48         case R.id.Startrecording://開始錄音
 49              fasong();
 50             break;
 51         case R.id.stoptrecording://結束錄音
 52             jieshu();
 53             break;
 54         case R.id.Playtape://播放錄音
 55             play();
 56             break;
 57         default:
 58             break;
 59         }
 60     }
 61     
 62     /**
 63      * 發送語音
 64      */
 65     private void fasong(){
 66         if(recorder != null){
 67             //不等於空的時候讓他變閑置
 68             recorder.reset();
 69         }else{
 70             recorder = new MediaRecorder();
 71         }
 72         recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
 73         //輸出格式
 74         recorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
 75         //設置音頻編碼器
 76         recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
 77         //緩存目錄
 78         String str = FileUtil.getSDCardPath()+"/A微信/voice";
 79         //檢查該目錄是否存在  否則創建
 80         FileUtil.checkDir(str);
 81         //設置文件名
 82         voicePath = str+ System.currentTimeMillis()+".amr";
 83         //設置錄音的輸出路徑
 84         recorder.setOutputFile(voicePath);
 85         
 86         try {
 87             recorder.prepare();
 88         } catch (IOException e) {
 89             // TODO Auto-generated catch block
 90             e.printStackTrace();
 91         }
 92         recorder.start();
 93         time = System.currentTimeMillis();
 94     }
 95     
 96     /**
 97      * 結束語音
 98      */
 99     private void jieshu(){
100         recorder.stop();
101         long shijian =System.currentTimeMillis() - time;
102         if(shijian<1000){//判斷,如果錄音時間小於一秒,則刪除文件提示,過短
103             File file = new File(voicePath);
104             if(file.exists()){//判斷文件是否存在,如果存在刪除文件
105                 file.delete();//刪除文件
106                 Toast.makeText(MainActivity.this, "錄音時間過短",Toast.LENGTH_SHORT).show();
107             }
108         }
109         //重置
110         recorder.release();
111         if(recorder != null){
112             recorder.release();
113             recorder = null;
114             System.gc();
115         }
116     }
117     
118     /**
119      * 播放錄音
120      */
121     private void play(){
122         if(player != null){
123             player.reset();
124             try {
125                 //設置語言的來源
126                 player.setDataSource(voicePath);
127                 //初始化
128                 player.prepare();
129                 //開始播放
130                 player.start();
131             }catch (IOException e) {
132                 // TODO Auto-generated catch block
133                 e.printStackTrace();
134             }
135 
136         }
137     }
138 }

好了,到這錄音和播放的功能就已經完美實現了,對了,還需要加上錄音權限,百度可以搜到

下面附上源碼下載地址:鏈接: https://pan.baidu.com/s/1qYpMITY 密碼: jvg5

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM