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

原文地址:https://www.cnblogs.com/langfei8818/p/5873569.html