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

时间: 2024-10-17 07:39:21

Android学习之路-录音功能实现的相关文章

Android学习之路——Android四大组件之activity(二)

上一篇讲了activity的创建和启动,这一篇,我们来讲讲activity的数据传递 activity之间的数据传递,这里主要介绍的是activity之间简单数据的传递,直接用bundle传递基本数据类型的数据.还有一种数据类型是parcelable和serialable 用bundle 传递数据有两种情况,这篇文章就分别从两个方面说明一下. 一.利用bundle传递基本数据类型 1.启动时传递数据,使用intent的put方法,将数据写入bundle中,然后startActivity(inte

Android学习之路——Android四大组件之activity(一)

一.什么是Activity? Activity简单的说就是一个界面,我们在Android手机上看到的每一个界面就是一个activity. 二.Activity的创建 1.定义一个类继承activity,然后在清单文件manifest.xml文件的application节点下注册activity,这个activity就创建成功了. public class MyActivity extends Activity { } 2.清单文件注册activity <application android:a

Android学习之路(转载)

原文地址:http://stormzhang.github.io/android/2014/07/07/learn-android-from-rookie/ 硬件 电脑–推荐Mac 首先声明我不是果粉,个人Windows,Linux,Mac OX系统均用过, 只能说Windows上面的开发工具简直难以恭维,尤其命令行超级难用,而Linux自己必须得花不少时间在折腾中,更是不适合新手了,Max OS是我认为迄今为止最好用的系统,没有之一, 所以如果你不差钱的话,强烈建议入手一台Mac,推荐Pro系

Android 学习之路--android基础(三)

Android 学习之路--android基础(三) | Talent?C 盒子 盒子 博客 友链 关于 Posts List 作者Talent?C转载请注明出处 前言 上一篇文章我们介绍了 活动(Activity) 的作用及相关用法,我们知道活动是用来给用户展示 UI界面 的,那么在Android中都有哪些UI控件呢?今天就让我们来简单学习几种常见的 UI控件. 如何编写UI界面? Android Studio中为我们提供两种UI界面的编辑方式, 第一种是通过Android Studio 提供

Android学习之路——简易版微信为例(二)

1 概述 从这篇博文开始,正式进入简易版微信的开发.深入学习前,想谈谈个人对Android程序开发一些理解,不一定正确,只是自己的一点想法.Android程序开发不像我们在大学时候写C控制台程序那样,需要从main开始写代码逻辑,大部分逻辑控制代码都由自己来实现.事实上,Android已经为我们提供了一个程序运行的框架,我们只需要往框架中填入我们所需的内容即可,这里的内容主要是:四大组件——Activity.Service.ContentProvider.BroadCast.在这四大组件中,可以

Android学习之路之数据的使用(一)

今天是Android学习第四天,上午简单的学习了数据的存储与使用,在这里把上午的总结一下 数据存储分为四大类: * 文件 * Sharedpreference(参数) * SQLite数据库 * 内容提供者(Content provide) 先来看看前两种方法,文件 和 Sharedpreference 1. 文件 这里的文件和Java里的文件时一模一样的,具体的就不在介绍,看过程 首先在主界面上定义两个按钮,一个是"写文件"一个是"读文件",先写后读 对写文件添加

Android学习之路-------广播接收器

前言 没想到离上一篇博文的时间已经有一个多星期了,时间真的不等人啊,在这里LP告诉你们一个道理,如果现在有谁正在看管理时间的书,那么请你们把这些书放下吧,看了也没有用,因为时间我们根本管不了,我们只能管自己,如果真的想管时间,错了,应该是珍惜时间的话,那么请你们要和时间做朋友,介绍一本书给大家看<和时间做朋友> 作者是 李笑来. 不说废话了,广播开始了 目录 什么是广播 广播的种类 怎么去使用这些广播 最安全的广播 什么是广播? 广播相信有上过学的人都知道,在学校里面都有那么一个大喇叭,通知大

android学习之路--------intent

正式开始学习android,没有看书和视频,所以没有系统的学,只是看到哪个知识点就去学习,今天学习界面之间的跳转,以及传值,主要的知识点是intent, @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); LinearLayout view = new LinearLa

ANDROID学习之路 转

版权声明:本文为 stormzhang 原创文章,可以随意转载,但必须在明确位置注明出处!!! 这篇博客背后的故事 一路走来很不容易,刚好知乎上被人邀请回答如何自学android编程, 就借这个机会在知乎上记录一路走来的历程,很励志,希望能给那些正在或准备走编程行业的人一些正能量,内容有点长,感兴趣的可以当做励志小说阅读吧. 收到一些朋友的微博私信,说能不能给Android新手们一些指导,我只能说指导谈不上,毕竟我也很多东西正在学习中,与此同时一大学同学准备转行Android,可以说是从头开始,