Android一个类实现录音与播放实例

目录
  • 前言
  • 实现效果
  • 代码实现
  • XML
  • 静态权限
  • 动态权限
  • 总结

前言

最近混合开发的项目 在做语音识别时 h5拿不到麦克风的权限
几经周折 开发任务又落到了原生开发这里

先写一个demo实现录音和播放功能 然后由web端同事调用交互方法

实现效果

代码实现

public class MainActivity extends AppCompatActivity {
    private static final String LOG_TAG = "MainActivity";
    //语音文件保存路径
    private String FileName = null;
    //界面控件
    private Button startRecord;
    private Button startPlay;
    private Button stopRecord;
    private Button stopPlay;

    //语音操作对象
    private MediaPlayer mPlayer = null;
    private MediaRecorder mRecorder = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        requestPermission();//请求麦克风权限
        //开始录音
        startRecord = findViewById(R.id.startRecord);
        //绑定监听器
        startRecord.setOnClickListener(new startRecordListener());

        //结束录音
        stopRecord = findViewById(R.id.stopRecord);
        stopRecord.setOnClickListener(new stopRecordListener());

        //开始播放
        startPlay = findViewById(R.id.startPlay);
        //绑定监听器
        startPlay.setOnClickListener(new startPlayListener());

        //结束播放
        stopPlay = findViewById(R.id.stopPlay);
        stopPlay.setOnClickListener(new stopPlayListener());

        //设置sdcard的路径
        FileName = Environment.getExternalStorageDirectory().getAbsolutePath();
        FileName += "/test.mp3";
    }

    private void requestPermission() {
        PermissionGen.with(this)
                .addRequestCode(100)
                .permissions(Manifest.permission.RECORD_AUDIO,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE,
                        Manifest.permission.WAKE_LOCK)
                .request();
    }

    //开始录音
    class startRecordListener implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            mRecorder = new MediaRecorder();
            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            mRecorder.setOutputFile(FileName);
            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            try {
                mRecorder.prepare();
                mRecorder.start();
            } catch (IOException e) {
                Log.e(LOG_TAG, "prepare() failed ---" + e.getMessage());
            }
        }

    }

    //停止录音
    class stopRecordListener implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            mRecorder.stop();
            mRecorder.release();
            mRecorder = null;
        }
    }

    //播放录音
    class startPlayListener implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            mPlayer = new MediaPlayer();
            try {
                mPlayer.setDataSource(FileName);
                mPlayer.prepare();
                mPlayer.start();
            } catch (IOException e) {
                Log.e(LOG_TAG, "播放失败");
            }
        }

    }

    //停止播放录音
    class stopPlayListener implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            mPlayer.release();
            mPlayer = null;
        }

    }

}

XML

<?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"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/startRecord"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="100dp"
        android:text="开始录音"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/stopRecord"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="结束录音"
        app:layout_constraintBottom_toTopOf="@id/startPlay"
        app:layout_constraintTop_toBottomOf="@id/startRecord" />

    <Button
        android:id="@+id/startPlay"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="开始播放"
        app:layout_constraintBottom_toTopOf="@id/stopPlay"
        app:layout_constraintTop_toBottomOf="@id/stopRecord" />

    <Button
        android:id="@+id/stopPlay"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="结束播放"
        app:layout_constraintTop_toBottomOf="@id/startPlay" />

</androidx.constraintlayout.widget.ConstraintLayout>

静态权限

 <!--录音和写磁盘权限-->
    <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" />

动态权限

  PermissionGen.with(this)
                .addRequestCode(100)
                .permissions(Manifest.permission.RECORD_AUDIO,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE,
                        Manifest.permission.WAKE_LOCK)
                .request();

总结

到此这篇关于Android一个类实现录音与播放实例的文章就介绍到这了,更多相关Android实现录音与播放内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android录音播放管理工具

    1.语音播放直接用系统工具就好了,这个就不多说了,根据传入的路径(网络路径或本地路径均可)播放音频文件 /** * Created by zhb on 2017/1/16. * 音乐在线播放 */ public class PlayManager { private Context mcontext; public PlayManager(Context context){ this.mcontext = context; } public void play(String song){ Med

  • 详解Android开发录音和播放音频的步骤(动态获取权限)

    步骤: 配置权限: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.work.mediaplay"> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission> <us

  • Android实现自制和播放录音程序

    首先,让我们先看下实现的截图: 当有录音文件存在时,会显示在下面的ListView当中. 下面给出实现的完整代码: 1.主程序代码 package irdc.ex07_11; import java.io.File; import java.io.IOException; import java.util.ArrayList; import android.app.Activity; import android.content.Intent; import android.media.Medi

  • Android实现语音播放与录音功能

    本文实例为大家分享了Android实现语音播放与录音的具体代码,供大家参考,具体内容如下 项目用到的技术点和亮点 语音录音 (单个和列表) 语音播放(单个和列表) 语音录音封装 语音播放器封装 语音列表顺序播放 语音列表单个播放 复用问题处理 因为安装原生录音不能录mp3格式文件 而mp3格式是安卓和ios公用的,所以我们需要的是能直接录取mp3文件或者录完的格式转成mp3格式 下面添加这个库 能直接录mp3文件,我觉得是最方便的 compile 'com.czt.mp3recorder:lib

  • Android一个类实现录音与播放实例

    目录 前言 实现效果 代码实现 XML 静态权限 动态权限 总结 前言 最近混合开发的项目 在做语音识别时 h5拿不到麦克风的权限几经周折 开发任务又落到了原生开发这里 先写一个demo实现录音和播放功能 然后由web端同事调用交互方法 实现效果 代码实现 public class MainActivity extends AppCompatActivity { private static final String LOG_TAG = "MainActivity"; //语音文件保存

  • Android使用Service实现简单音乐播放实例

    Service翻译成中文是服务,熟悉Windows 系统的同学一定很熟悉了.Android里的Service跟Windows里的Service功能差不多,就是一个不可见的进程在后台执行. Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行,例如我们打开一个音乐播放器来听音乐,在听音乐的同时也想做下其它的事情,比如上网聊Q.或者上网浏览新闻之类的事情.这样的话,我们就需要用到S

  • Android使用MediaRecorder实现录音及播放

    现在项目中有使用到音视频相关技术,在参考了网上各种大牛的资料及根据自己项目实际情况(兼容安卓6.0以上版本动态权限管理等),把声音录制及播放相关代码做个记录. public class MediaRecorderActivity extends BaseActivity { private Button start_tv; private ListView listView; //线程操作 private ExecutorService mExecutorService; //录音API pri

  • Android录音mp3格式实例详解

    Android录音支持的格式有amr.aac,但这两种音频格式在跨平台上表现并不好. MP3显然才是跨平台的最佳选择. 项目地址 GavinCT/AndroidMP3Recorder 实现思路概述 在分析代码前,我们需要明确几个问题 1. 如何最终生成MP3 实现MP3格式最好是借助Lame这个成熟的解决方案. 对于Android来说,需要借助JNI来调用Lame的C语言代码,实现音频格式的转化. 2. 如何获取最初的音频数据 AudioRecord类可以直接帮助我们获取音频数据. 3. 如何进

  • Android编程检测手机录音权限是否打开的方法

    本文实例讲述了Android编程检测手机录音权限是否打开的方法.分享给大家供大家参考,具体如下: 6.0之前的权限检测只是检测到是否在清单文件中注册 Boolean flag = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.RECORD_AUDIO", "包名")); Boolean flag = PermissionChecker.checkSelfPer

  • C++设计类不能被继承的方法实例讲解

    首先想到的是在C++中,子类的构造函数会自动调用父类的构造函数.同样,子类的析构函数也会自动调用父类的析构函数.要想一个类不能被继承,只要把它的构造函数和析构函数都定义为私有函数.那么当一个类试图从它那继承的时候,必然会由于试图调用构造函数.析构函数而导致编译错误. 可是这个类的构造函数和析构函数都是私有函数了,怎样才能得到该类的实例呢?可以通过定义静态来创建和释放类的实例.基于这个思路,可以写出如下的代码: 复制代码 代码如下: ////////////////////////////////

  • iOS多媒体音频(下)-录音及其播放的实例

    上一篇中总结了iOS中音效和音频播放的最基本使用方法,其中音频的播放控制是使用AVFoundation.framework框架中的AVAudioPlayer播放器对象来实现的,而这里音频的录制则是使用了同样框架下的一个叫AVAudioRecorder的录音机对象来实现,这两个类的用法流程非常类似,类的属性和方法也类似,例如:播放器中需要获取音频文件的url,而录音机要在沙盒中Docuemnt目录下创建一个音频文件路径url: 播放器有isPlaying变量判断是否正在播放,录音机中有isReco

  • Android编程开发录音和播放录音简单示例

    本文实例讲述了Android编程开发录音和播放录音的方法.分享给大家供大家参考,具体如下: /* * The application needs to have the permission to write to external storage * if the output file is written to the external storage, and also the * permission to record audio. These permissions must be

  • Android Build类的详解及简单实例

    Android Build类的详解及简单实例 一.类结构: java.lang.Object ? android.os.Build 二.类概述:从系统属性中提取设备硬件和版本信息. 三.内部类: 1.Build.VERSION 各种版本字符串 2.Build.VERSION_CODES 目前已知的版本代码的枚举类 四.常量:UNKNOWN 当一个版本属性不知道时所设定的值.其字符串值为 unknown . 五.构造方法: Build () 六.静态属性 1.BOARD 主板:The name o

  • Android实现一个包含表格的图标库实例代码

    之前有写过一个图表lib,但是开发的速度,大多很难跟上产品需求变化的脚步,所以修改了下原先的图表库,支持图表下面能整合table显示对应的类目,用曲线替换了折线,支持多曲线的显示,增加了显示的动画,,增加了一些可定制的属性,支持水平柱状图和叠加柱状图,以及多曲线图和饼状图的显示 1.效果图 2.各种图表的使用方式 1.饼状图 这个和原先的使用一样,只不过增加了一个动画,可以参看之前的文章,饼状图使用. 2.水平多柱状图 2.1 xml布局 <wellijohn.org.varchart.hor_

随机推荐