‘壹’ android实现录音功能
1 Android录音需要声明录音权限
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
2.录音文件要写到文件夹中,创建文件夹,在Application的onCreate方法中创建文件夹
@Override
public void onCreate() {
super.onCreate();
CrashHandler mCrashHandler = CrashHandler.getInstance();
mCrashHandler.init(getApplicationContext(), getClass());
initFile();
}
private void initFile() {
//录音文件
File audioFile = new File(Constant.UrlAudio);
if (!audioFile.exists()) {
audioFile.mkdirs();
} else if (!audioFile.isDirectory()) {
audioFile.delete();
audioFile.mkdirs();
}
//拍摄图片文件
File imageFile = new File(Constant.UrlImage);
if (!imageFile.exists()) {
imageFile.mkdirs();
} else if (!imageFile.isDirectory()) {
imageFile.delete();
imageFile.mkdirs();
}
}
Constant.UrlImage是个静态的文件路径
//录音文件
public static String UrlAudio = FileUtil.getSdcardPathOnSys()+"/EhmFile/media/audio/";
3.在activity中开始录音
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.media.MediaRecorder;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Locale;
public class Record2Activity extends AppCompatActivity {
// 录音界面相关
Button btnStart;
Button btnStop;
TextView textTime;
// 录音功能相关
MediaRecorder mMediaRecorder; // MediaRecorder 实例
boolean isRecording; // 录音状态
String fileName; // 录音文件的名称
String filePath; // 录音文件存储路径
Thread timeThread; // 记录录音时长的线程
int timeCount; // 录音时长 计数
final int TIME_COUNT = 0x101;
// 录音文件存放目录
final String audioSaveDir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/audiodemo/";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_record2);
btnStart = (Button) findViewById(R.id.btn_start);
btnStop = (Button) findViewById(R.id.btn_stop);
textTime = (TextView) findViewById(R.id.text_time);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 开始录音
btnStart.setEnabled(false);
btnStop.setEnabled(true);
startRecord();
isRecording = true;
// 初始化录音时长记录
timeThread = new Thread(new Runnable() {
@Override
public void run() {
countTime();
}
});
timeThread.start();
}
});
btnStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 停止录音
btnStart.setEnabled(true);
btnStop.setEnabled(false);
stopRecord();
isRecording = false;
}
});
}
// 记录录音时长
private void countTime() {
while (isRecording) {
Log.d("mediaRe","正在录音");
timeCount++;
Message msg = Message.obtain();
msg.what = TIME_COUNT;
msg.obj = timeCount;
myHandler.sendMessage(msg);
try {
timeThread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Log.d("mediaRec", "结束录音");
timeCount = 0;
Message msg = Message.obtain();
msg.what = TIME_COUNT;
msg.obj = timeCount;
myHandler.sendMessage(msg);
}
/**
* 开始录音 使用amr格式
* 录音文件
*
* @return
*/
public void startRecord() {
// 开始录音
/* ①Initial:实例化MediaRecorder对象 */
if (mMediaRecorder == null)
mMediaRecorder = new MediaRecorder();
try {
/* ②setAudioSource/setVedioSource */
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 设置麦克风
/*
* ②设置输出文件的格式:THREE_GPP/MPEG-4/RAW_AMR/Default THREE_GPP(3gp格式
* ,H263视频/ARM音频编码)、MPEG-4、RAW_AMR(只支持音频且音频编码要求为AMR_NB)
*/
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
/* ②设置音频文件的编码:AAC/AMR_NB/AMR_MB/Default 声音的(波形)的采样 */
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
fileName = DateFormat.format("yyyyMMdd_HHmmss", Calendar.getInstance(Locale.CHINA)) + ".m4a";
//注意文件夹要创建之后才能使用
filePath = Constant.UrlAudio + fileName;
/* ③准备 */
mMediaRecorder.setOutputFile(filePath);
mMediaRecorder.prepare();
/* ④开始 */
mMediaRecorder.start();
} catch (IllegalStateException e) {
Log.i("mediaEr", "call startAmr(File mRecAudioFile) failed!" + e.getMessage());
} catch (IOException e) {
e.printStackTrace();
Log.i("mediaEr", "call startAmr(File mRecAudioFile) failed!" + e.getMessage());
}
}
/**
* 停止录音
*/
public void stopRecord() {
//有一些网友反应在5.0以上在调用stop的时候会报错,翻阅了一下谷歌文档发现上面确实写的有可能会报错的情况,捕获异常清理一下就行了,感谢大家反馈!
try {
mMediaRecorder.stop();
mMediaRecorder.release();
mMediaRecorder = null;
filePath = "";
} catch (RuntimeException e) {
Log.e("mediaR", e.toString());
mMediaRecorder.reset();
mMediaRecorder.release();
mMediaRecorder = null;
File file = new File(filePath);
if (file.exists())
file.delete();
filePath = "";
}
}
// 格式化 录音时长为 秒
public static String FormatMiss(int miss) {
return "" + miss;
}
Handler myHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case TIME_COUNT:
int count = (int) msg.obj;
Log.d("meidaRe","count == " + count);
textTime.setText(FormatMiss(count));
break;
}
}
};
@Override
protected void onDestroy() {
super.onDestroy();
myHandler.removeCallbacksAndMessages(null);
}
}
布局文件很简单
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Record2Activity">
<Button
android:id="@+id/btn_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="结束"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/btn_start"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/btn_stop"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/text_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="11dp"
android:layout_marginTop="47dp"
android:text="时间"
app:layout_constraintStart_toStartOf="@+id/btn_start"
app:layout_constraintTop_toBottomOf="@+id/btn_start" />
</androidx.constraintlayout.widget.ConstraintLayout>
这样就可以使用录音功能了
‘贰’ 安卓手机录音文件如何导出到电脑
安卓手机录音文件如何导出到电脑?敬业签这款支持录音记事的便签软件就可以帮你解决这一难题,因运乎为它:
1、支持我们创建语音便签,所以我们可以通过录音的方式记录重要事项或内容,旁亩悉而且还可以直接上传录音文件;
2、创建的音频文件可以自动备份至云端;
3、具备多端云同步的功能,只需登录同一账号,录音文件就可以自动同步至以下几个端口:Windows/Android/ios/Web/ipad/Mac,所以它可以直接将录音文件耐基转到电脑上,如果需要,还可以直接下载到电脑上。
‘叁’ android 怎么用二进制流上传图片与音频文件
QusetionForm qusetionForm = (QusetionForm)form; FormFile imageTopic= qusetionForm.getImageTopic(); String name=imageTopic.getFileName(); String url=(servlet.getServletConfig().getServletContext().getRealPath("\\")+name).replace('\\','/');
‘肆’ 安卓手机如何上传音频到百度中
下载网络云,上传文件夹就可以了
‘伍’ android上传录音到服务器代码思路
你先得配液确定服务器用什么协议啊,HTTP,webservice,socket等等,如果用http一般两种方式,一个是java自带的urlhttpconnection,还有就是阿帕奇的httpclient。
代码片段
// 使用POST方法提交数据,必须大写
conn.setRequestMethod("POST");
// 需要输出流
conn.setDoOutput(true);
//培吵物 需要输入流
conn.setDoInput(true);
// 连接超时,10秒
conn.setConnectTimeout(10 * 1000);
// 读取超时,10秒
conn.setReadTimeout(10 * 1000);
// 打开输出流,写入数据
out = conn.getOutputStream();
out.write(data);
out.flush();
// 以上
conn.connect();
if (conn.getResponseCode() == 200) {
in = conn.getInputStream();
// TODO 读取数据
// 参考
int contentLength = conn.getContentLength();
ByteArrayOutputStream buf = new ByteArrayOutputStream(
contentLength > 0 ? contentLength : 1024);
byte[] buffer = new byte[1024];
while ((contentLength = in.read(buffer)) != -1) {
buf.write(buffer, 0, contentLength);
}
// 可选
buf.flush();
return buf.toByteArray();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (conn != null) {
conn.disconnect();
}
// 错误的写法
// try {
// in.close();
// out.close();
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
//尽量不要返回null 避免空指针异常
return new byte[0];
}
服务器在getpost里面接收可以转碰誉为btye数组,然后在转为文件
‘陆’ 如何设置手机自动通话录音并上传录音的文件夹
android版本从1.6开始就收紧了软件内录权限,如果你的手机没有内侍判置录音功能,那么想找个能录音的软件都要碰运气,更不要说你连自己的手机系统版本号都不肯讲出来的情况下了。
这两个软件功能合并起来会被定义为非法软件,所以万一你找到了内录软件,那么上传的事可以交给一老宽改些网盘客户端,巧慎他们都具备自动上传功能。
‘柒’ 怎样把电脑里的音频文件传到手机上
手机文件怎么传到电脑?现在很多事情我们都能通过手机完成,因此上面也保存了很多重要的数据,如通讯录联系人、照片、微信聊天记录等等,那这些数据怎么传到电脑上呢?今天就针对这个问题,给大家分享几招,希望能够帮助到你哟!
苹果手机备份?生活中我们难免会遇到数据丢失的情况,因此定期备份才是有效保护数据的做法,小伙伴们还在等什么呢?抓紧试试梁纤拍看吧!
‘捌’ OPPO29安卓手机要怎么把录音上传到群文件中的某个文件夹里
一般来说你打开那个文件夹,然后一般都会有上传的选项,你点击一下就好了。
‘玖’ 安卓手机录音怎么发到微信上
1、首先打开安卓手机,找到录音机,在录音机中将录音裁剪成多个小录音文件。
2、其次长按录音,选中分享,选择添加到微信收藏,打配简毕开微信,点开我,选中收藏,点击录音,选择三点。
3、最后选中发送给朋友,点击联系咐燃人,选中分享就可以把培芹录音发到微信上了。
‘拾’ 安卓手机的录音如何发到苹果手机上
先发到电脑端,用格式工厂转换成mp3格式。
将手机与电脑用usb连接,电脑上的itunes自动打开,如果你电脑里没有安装itunes软件的话,请下载。
勾选音乐选项下的同步音乐,想把整个音乐库中的歌曲都导入手机的话就选择“整个音乐资料库”,点击下面的应用即把录音发到苹果手机上了。