首页 > 代码库 > Android学习之路-录音功能实现

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 block133                 e.printStackTrace();134             }135 136         }137     }138 }

好了,到这录音和播放的功能就已经完美实现了,对了,还需要加上录音权限,百度可以搜到

下面附上源码下载地址:链接: https://pan.baidu.com/s/1qYpMITY 密码: jvg5

 

Android学习之路-录音功能实现