当前位置:首页 » 文件管理 » android上传录音文件

android上传录音文件

发布时间: 2023-01-23 09:01:33

A. 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>

这样就可以使用录音功能了

B. 手机里的录音怎么传到电脑上

以华为手机P40,EMUI10系统为例,手机录音传到电脑上的方式:

1、如果使用的是带有蓝牙功能的电脑,可以将手机蓝牙打开,与电脑连接后,在手机文件管理器中找到录音文件,然后用蓝牙发送到电脑设备上,电脑端接收到文件后保存即可。

2、可以通过电子邮件来实现,在录音机中选中需要上传的录音文件,长按后会出现一些选项,点击“分享”,选择电子邮件,然后将录音文件作为附件发送给自己,在电脑上登录邮箱,下载附件后保存。



3、还可以在手机上登录QQ,点击“设备”选项,选择“我的电脑”,在聊天窗口下方点击文件夹图标,然后选中需要上传的录音文件,发送成功后,在电脑版QQ上接收文件并保存。

4、也可以在微信的通讯录中找到“文件传输助手”,进入聊天窗口后点击右侧的+号,选择“文件”,选中录音文件后点击发送,同样是在电脑版微信上接收文件并保存。

该答案适用于iPhone、华为、小米、OPPO等大部分品牌的手机型号。

C. 如何设置手机自动通话录音并上传录音的文件夹

android版本从1.6开始就收紧了软件内录权限,如果你的手机没有内置录音功能,那么想找个能录音的软件都要碰运气,更不要说你连自己的手机系统版本号都不肯讲出来的情况下了。
这两个软件功能合并起来会被定义为非法软件,所以万一你找到了内录软件,那么上传的事可以交给一些网盘客户端,他们都具备自动上传功能。

D. 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数组,然后在转为文件

E. 如何把苹果手机的录音文件发送到电脑或安卓手机

手机连接电脑--打开itunes-设置-同步语音备忘录--然后选择音乐,即可导出;
这种方法导出录音都比较繁琐,如果你经常使用,建议你下载专业的录音软件,例如“移动公证”,提供手机端的:电话录音、现场录音、现场录像、拍照取证、存证和公证管理服务,存储云端,支持微信、QQ直接分享,也可以下载到电脑,希望对你有帮助。

F. OPPO29安卓手机要怎么把录音上传到群文件中的某个文件夹里

一般来说你打开那个文件夹,然后一般都会有上传的选项,你点击一下就好了。

G. 安卓手机放车上录音怎么弄的

车上录音可以传到手机上吗:可以的阿 要看是什么系统的,安卓的连接电脑开启储存模式,像优盘一样从我的电脑里找到录音文件拷贝出来就行,苹果手机直接可以从录音文件中分享行车记录仪上面的图像和声音数据可以通过多种途径导出和上传到手机上。第一是行车记录仪里的SD卡,通过读卡器导出到手机。第二可以用手机远程操控行车记录仪,把行车记录仪上面的图像声音数据进行上传到手机里。

H. 一个qq好友发给我的录音文档,我想发送到纸飞机软件上,怎么发送安卓手机

先把文档保存到手机本地,在用纸飞机发送出去就行

I. 安卓手机的录音如何发到苹果手机上

  1. 先发到电脑端,用格式工厂转换成mp3格式。

  2. 将手机与电脑用usb连接,电脑上的itunes自动打开,如果你电脑里没有安装itunes软件的话,请下载。

  3. 勾选音乐选项下的同步音乐,想把整个音乐库中的歌曲都导入手机的话就选择“整个音乐资料库”,点击下面的应用即把录音发到苹果手机上了。

J. android怎样上传本地音频文件

开启网络,打开应用,寻找上传功能,选择上传内容

热点内容
搭建文件存储服务器的意义 发布:2024-05-09 20:12:11 浏览:901
阿哈编程书 发布:2024-05-09 20:07:57 浏览:614
自带的猫如何改密码 发布:2024-05-09 19:55:07 浏览:797
桌面有个文件夹删不掉 发布:2024-05-09 19:37:42 浏览:914
怎么打开ftp端口 发布:2024-05-09 19:12:22 浏览:837
ios怎么配置vpn 发布:2024-05-09 19:10:00 浏览:984
如何制作带密码的pe 发布:2024-05-09 18:47:04 浏览:22
qq怎么设置空间访问密码 发布:2024-05-09 18:08:13 浏览:641
微信公众号的缓存 发布:2024-05-09 18:08:12 浏览:567
计算机的存储单元中存储的内容 发布:2024-05-09 17:57:24 浏览:626