android 断点续录,android 录音的断点续传
系统没有暂停的功能 只能把每次的录音进行拼接。。。
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 recordingFiles = new ArrayList();
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;// 指向它,以便获取地址
}
}
原文:http://www.cnblogs.com/jeno-song/p/5126608.html
android 断点续录,android 录音的断点续传相关推荐
- Android视频编辑器(一)通过OpenGL预览、录制视频以及断点续录等
前言 如今的视频类app可谓是如日中天,火的不行.比如美拍.快手.VUE.火山小视频.抖音小视频等等.而这类视频的最基础和核心的功能就是视频录制和视频编辑功能.包括了手机视频录制.美白.加滤镜.加水印 ...
- android注册文件打开,Android项目实战系列—基于博学谷(三)注册与登录模块
由于这个模块内容较多,篇幅较长,请耐心阅读. 注册与登录模块分为三个部分 [x] [欢迎界面]() [x] [注册界面]() [x] [登录界面]() 一.欢迎界面 1.创建工程,命名为BoXueGu ...
- Android录音器(可暂停、续录、续播)完整Demo
因为公司的项目需要,要做一个有暂停功能的录音播放器.查询了资料发现Android原生的录音API--MediaRecorder没有暂停功能.一旦调用MediaRecorder的stop方法,就会生成一 ...
- Android音视频之AudioRecord录音(一)
Android音视频之AudioRecord录音(一) 在音视频开发中,录音当然是必不可少的.首先我们要学会单独的录音功能,当然这里说的录音是指用AudioRecord来录音,读取录音原始数据,读到的 ...
- Android Webview录音功能与原生录音实现
近日项目集成了个带聊天功能的Webview,一开始只是文字聊天后来增加需求要可以发文字/图片/语音等,一开始使用Webview自带的授权来实现录音功能的,只要授权即可,后面由于IOS的不支持,导致要跟 ...
- android版自动答录机,手机android自动答录机|自动答录机安卓版下载 v2.4.6.2 - 跑跑车安卓网...
一款专为手机通话打造的自动答录机,通过设置安卓自动答录机可以自动为来电人播放录制的提示音并留言,android自动答录机还可自动录制来电者的留言,电话神器,赶紧get起来吧. 软件介绍 功能1 设定时 ...
- 抛砖引玉系列:Android简易实现录屏软件。
以前在工作中碰到一个问题,领导总是要求我给他路一段实现的功能效果或者当问题出现时,客户没办法描述清楚但是又找不到好用的免费录屏软件,所以昨天刚好有时间整理了一下,写了一个简易的Android录屏软件出 ...
- android 断点下载的实现,Android实现断点下载的方法
最近做的项目中需要实现断点下载,即用户一次下载可以分多次进行,下载过程可以中断,在目前大多数的带离线缓存的软件都是需要实现这一功能.本文阐述了通过sqlite3简单实现了一个具有断点下载功能的demo ...
- android studio断点不生效,Android Studio调试设置的断点无效
真他娘的坑爹,今天调试一个程序,在一个Activity里面设置了断点,无论如何代码都不能在断点处停下来,查了一整天才发现原来是这个罪魁祸首 解决办法 解决办法有两种: 第一种就是调试的时候将andro ...
最新文章
- POJ 1704 Georgia and Bob (Nim游戏变形)
- hdu4876 深搜+(随机枚举剪枝)
- 光纤有什么优势?还有哪些挑战需要面对呢?
- 每天一道LeetCode-----给定一个矩阵,如果某个元素是0,就将所在行所在列上所有元素否置0
- spring和activemq的结合(五)
- git bash命令_更优雅地使用命令行
- 判断listview是上滑还是下滑的方法
- 每日一笑 | 马冬梅当上了百度投资董事???
- 13 - java包装类
- 干活的不如写ppt的吗_干活的干不过写PPT的?或许只是工作汇报的方式错了……...
- informix数据库 java 增删改查
- (转载)make的-j命令(加速Linux程序编译)
- 工作流引擎厂商有哪些_国内主要工作流厂商分析
- 离散数学习题2.6:王教授是哪里人?
- 【九天教您南方cass 9.1】02 从地形图上绘制纵横断面
- Win系统新建文件夹快捷键
- 训练集、验证集、测试集的作用
- 证明:无理数乘以非零的有理数仍然是无理数
- cut and choose
- 解决android studio打包后安装APK提示“签名不一致,该应用可能已被修改。“
热门文章
- Java有了synchronized,为什么还要提供Lock
- 图解带你掌握`JVM`运行时核心内存区
- 要想下班早,微服务架构少不了
- 华为云PB级数据库GaussDB(for Redis)揭秘第十期:GaussDB(for Redis)迁移系列(上)
- 25个关键技术点,带你熟悉Python
- 【华为云技术分享】《跟唐老师学习云网络》 - Kubernetes网络实现
- 漫谈LiteOS-LiteOS SDK支持RISC-V架构
- 网络中pkt是什么意思_网络流行语Cp、磕么?是什么意思?
- Kotlin学习笔记 第二章 类与对象 第十二 十三节 对象表达式与对象声明 类型别名
- android 回归测试,自动遍历回归测试工具