系统没有暂停的功能  只能把每次的录音进行拼接。。。

package com.example.zrecord;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Locale;

import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

private MediaRecorder mr;
private String path;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn1 = (Button) findViewById(R.id.button1);
Button btn2 = (Button) findViewById(R.id.button2);
Button btn3 = (Button) findViewById(R.id.button3);
Button btn4 = (Button) findViewById(R.id.button4);

// 录音1
btn1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

try {
setState();
// 准备录制
mr.prepare();
// 开始录制
mr.start();
Toast.makeText(getApplicationContext(), "开始录音...", 0)
.show();

} catch (Exception e) {
e.printStackTrace();

}
}
});
// 录音2
btn2.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
if (mr != null) {
mr.stop();
mr.release();
mr = null;
Toast.makeText(getApplicationContext(), "结束录音...", 0)
.show();
}
}
});
// 录音3
btn3.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

}
});

btn4.setOnClickListener(new OnClickListener() {

private MediaPlayer mPlayer;

@Override
public void onClick(View v) {
mPlayer = new MediaPlayer();
try {
// mPlayer.setDataSource((String) SDCardUtils.getValue(
// getApplicationContext(), "R2", ""));
// mPlayer.prepare();
// mPlayer.start();

// 合并所有的文件并进行播放
File f = SetHeBing();
mPlayer.setDataSource(f.getAbsolutePath());
mPlayer.prepare();
mPlayer.start();

} catch (Exception e) {

}

}
});
}

private void setState() {
// file = new File("/sdcard/"
// + "YY"
// + new DateFormat().format("yyyyMMdd_hhmmss",
// Calendar.getInstance(Locale.CHINA)) + ".amr");

path = SDCardUtils.getSDCardPath()
+ new DateFormat().format("yyyyMMdd_hhmmss",
Calendar.getInstance(Locale.CHINA)) + ".amr";
SDCardUtils.saveValue(this, "R2", path);
// 创建录音对象
mr = new MediaRecorder();

// 从麦克风源进行录音
// mr.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
//
// // 设置输出格式
// mr.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
//
// mr
// .setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
//
// // 设置编码格式
// mr.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

// 设置录音为麦克风
mr.setAudioSource(MediaRecorder.AudioSource.MIC);
mr.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

// 设置输出文件
mr.setOutputFile(path);

}

protected File SetHeBing() {
/** 合并所有的音频文件 */
// 创建音频文件,合并的文件放这里
File tempFile = new File(SDCardUtils.getSDCardPath() + "hebing.amr");

FileOutputStream fileOutputStream = null;

// if (!mergeFile.exists()) {
// try {
// mergeFile.createNewFile();
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }

try {
fileOutputStream = new FileOutputStream(tempFile);
} catch (Exception e) {
e.printStackTrace();
}

// list里面为暂停录音 所产生的几段录音文件的名字,中间几段文件的减去前面的6个字节头文件
ArrayList<String> recordingFiles = new ArrayList<String>();
String path1 = (String) SDCardUtils.getValue(getApplicationContext(),
"R1", "");
String path2 = (String) SDCardUtils.getValue(getApplicationContext(),
"R2", "");
// File f1 = new File(path1);
// File f2 = new File(path2);
recordingFiles.add(path1);
recordingFiles.add(path2);
for (int index = 0; index < recordingFiles.size(); index++) {
File file = new File(recordingFiles.get(index));

try {
FileInputStream fileInputStream = new FileInputStream(file);
byte[] myByte = new byte[fileInputStream.available()];
// 文件长度
int length = myByte.length;
Log.d("RECORD-LENGTH", length + "");

// 头文件
if (index == 0) {
while (fileInputStream.read(myByte) != -1) {
fileOutputStream.write(myByte);
// fileOutputStream.write(myByte, 0,length);
}
}

// 之后的文件,去掉前面6个字节(头文件)
else {
while (fileInputStream.read(myByte) != -1) {
fileOutputStream.write(myByte, 6, length - 6);
}
}

fileOutputStream.flush();
fileInputStream.close();
// 合并之后删除文件
// file.delete();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

// 结束后关闭流
try {
fileOutputStream.flush();
fileOutputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return tempFile;// 指向它,以便获取地址
}
}

android 录音的断点续传的更多相关文章

  1. 通过Android录音进行简单音频分析

    Android录音有MediaRecorder和AudioRecord两种方式,前者使用方便,可以直接生成录音文件,但是录音格式为aac和amr等等,都经过压缩处理,不方便进行音频分析. 而用Audi ...

  2. 【Android】【录音】Android录音--AudioRecord、MediaRecorder

    [Android][录音]Android录音--AudioRecord.MediaRecorder Android提供了两个API用于实现录音功能:android.media.AudioRecord. ...

  3. Android 录音和播放

    今天工作上需要做一个一边录音一边播放的功能,大致原因是有一个外部设备输入音频到我们机器,然后我们机器需要马上把音频播放出来.所以了解了一些有关录音和播放的知识.接到这个任务的第一反应就是看看Andro ...

  4. 关于ios 和 android 录音(语音)对聊文件格式问题

    关于ios 和 android 录音(语音)对聊文件格式问题 在做语音对讲的时候,将会碰到录制语音格式的问题,这些需要跨平台我们可能需要使用双方平台都支持的格式,或者执行编码转换 解决方式如下: wa ...

  5. Android 录音器

    Android自带的mediarecoder录音器不含pause暂停功能,解决方法:录制多个音频片段,最后合成一个文件. 参照 : http://blog.csdn.net/a601445984/ar ...

  6. Android录音应用

    首先是xml布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xm ...

  7. android 多线程下载 断点续传

    来源:网易云课堂Android极客班第八次作业练习 练习内容: 多线程 asyncTask handler 多线程下载的原理 首先获取到目标文件的大小,然后在磁盘上申请一块空间用于保存目标文件,接着把 ...

  8. android录音相关

    android的麦克风在现在的生活中发挥着很大的作用,打电话,视频聊天,语音识别等等. android sdk的api里提供了很方便的调用方法,下面写一个小的DEMO. 五个按钮:开始录音,停止,播放 ...

  9. Android录音--AudioRecord、MediaRecorder

    Android提供了两个API用于实现录音功能:android.media.AudioRecord.android.media.MediaRecorder. 网上有很多谈论这两个类的资料.现在大致总结 ...

随机推荐

  1. quatz2d使用注意点

    1使用图层设置圆角,cornerRadiu一般设置为10的参数,若设置圆形,cornerRadiu设为宽度的一半

  2. phalcon: crypt-encrypt/decrypt用法

    phalcon:crypt加密与解密 可以在入口文件index.php进行配置,也可以不配置: $di->set('crypt', function(){ $crypt = new \Phalc ...

  3. Unity5中叹为观止的实时GI效果

    http://www.manew.com/thread-43970-1-1.html 今天为大家分享unity与Alex Lovett共同使用unity5制作的Shrine Arch-viz Demo ...

  4. tcp服务的测试程序开源

    开源的是一个测试客户端,可以用来检验服务器端程序的并发处理能力. 使用方法为: python epolltest.py --host=192.168.15.128 --port=8809 --degr ...

  5. JAVA通过C3P0连接数据库

    配置文件: <?xml version="1.0" encoding="UTF-8"?> <c3p0-config>    <na ...

  6. noip2016酱油记day1

    真的是noip2016酱油记了. t1模拟,应该可以过. t2用了个简单的桶瞎搞,估计剩50pt了. t3直接不会写. 心好累... 考的分数肯定没去年高. 但不论如何,明天正常发挥就好. 正常发挥下 ...

  7. C#程序以管理员权限运行【我采用了第二种,比较好用】

    在Vista 和 Windows 7 及更新版本的操作系统,增加了 UAC(用户账户控制) 的安全机制,如果 UAC 被打开,用户即使以管理员权限登录,其应用程序默认情况下也无法对系统目录.系统注册表 ...

  8. console的一个小易错点

    以前用控制台都是 console.log("a"); 每次log的都是一个变量或直接的字符串, 但是今天我在log里面写了个表达式, 下面再写各个表达式的时候,发现他莫名奇妙的输出 ...

  9. 为SpringMvc项目安装BootStrap和AngularJs前端框架

    在我们"用SpringMVC写一个注册的小Demo"之前,我们学习一下如何给该项目安装Bootstrap和AngularJs的前端框架,这样我们就能轻松排版出漂亮的登录界面.我们采 ...

  10. 数据库中Schema(模式)概念的理解

    在学习SQL的过程中,会遇到一个让你迷糊的Schema的概念.实际上,schema就是数据库对象的集合,这个集合包含了各种对象如:表.视图.存储过程.索引等.为了区分不同的集合,就需要给不同的集合起不 ...