Android详细教程(基础篇):三十一、Android 媒体录制MediaRecorder详解

本文深入探讨了Android的MediaRecorder,用于音频和视频录制。介绍了MediaRecorder的生命周期,详细讲解了音频录制和视频录制的配置,包括权限设置、布局设计及播放功能。同时,还提到了多点触控的概念及其在Activity中的实现。
摘要由CSDN通过智能技术生成

5.6. 媒体录制

5.6.1 MediaRecorder简介

使用MediaRecorder进行音频和视频的录制。

继承结构:

public class

MediaRecorder

extends Object

java.lang.Object

   

android.media.MediaRecorder

 

MediaRecorder的生命周期:

5.6.2 音频录制

配置:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

            xmlns:android="http://schemas.android.com/apk/res/android"

            android:orientation="vertical"

            android:layout_width="fill_parent"

            android:layout_height="fill_parent">

            <LinearLayout

                       android:orientation="horizontal"

                       android:layout_width="wrap_content"

                       android:layout_height="wrap_content">

                       <ImageButton

                                   android:id="@+id/record"

                                   android:layout_width="wrap_content"

                                   android:layout_height="wrap_content"

                                   android:src="@drawable/record" />

                       <ImageButton

                                   android:id="@+id/stop"

                                   android:layout_width="wrap_content"

                                   android:layout_height="wrap_content"

                                   android:src="@drawable/stop" />

            </LinearLayout>

            <TextView

                       android:id="@+id/info"

                       android:layout_width="fill_parent"

                       android:layout_height="wrap_content"

                       android:text="文字提示信息..." />

            <ListView

                       android:id="@+id/reclist"

                       android:layout_width="fill_parent"

                       android:layout_height="wrap_content" />

</LinearLayout>

 

Activity:

package com.makyan.demo;

import java.io.File;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import android.app.Activity;

import android.content.Intent;

import android.media.MediaRecorder;

import android.net.Uri;

import android.os.Bundle;

import android.os.Environment;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ImageButton;

import android.widget.ListView;

import android.widget.SimpleAdapter;

import android.widget.TextView;

 

public class MediaRecorderActivity extends Activity {

            private ImageButton record = null;                                                                    // 按钮信息

            private ImageButton stop = null;                                                            // 按钮信息

            private TextView info = null;                                                                              // 提示信息

            private MediaRecorder mediaRecorder = null;                          // MediaRecorder对象

            private File recordAudioSaveFile = null;                                     // 文件保存目录路径

            private File recordAudioSaveFileDir = null;                                // 文件保存目录

            private String recordAudioSaveFileName = null;                                   // 音频文件保存名称

            private SimpleAdapter recordSimpleAdapter = null;                // 适配器

            private ListView reclist = null;                                                                 // 定义列表视图

            private String recDir = "makyanrec";                                                                  // 保存目录

            private boolean sdcardExists = false;                                                     // 判断SD卡是否存在

            private boolean isRecord = false;                                                           // 判断是否正在录音

            private List<Map<String, Object>> recordFiles = null;   // 保存所有的List数据

           

            @Override

            public void onCreate(Bundle savedInstanceState) {

                       super.onCreate(savedInstanceState);

                       super.setContentView(R.layout.activity_media_recorder);                                         // 调用布局管理器

                       this.record = (ImageButton) super.findViewById(R.id.record); // 查找组件

                       this.stop = (ImageButton) super.findViewById(R.id.stop);                    // 查找组件

                       this.info = (TextView) super.findViewById(R.id.info);                            // 查找组件

                       this.reclist = (ListView) super.findViewById(R.id.reclist);          // 查找组件

 

                       // 判断SD卡是否存在

                       if (this.sdcardExists = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {                                           

                                   this.recordAudioSaveFileDir = new File(Environment

                                                           .getExternalStorageDirectory().toString()

                                                          + File.separator

                                                          + MediaRecorderActivity.this.recDir + File.separator); // 保存录音目录

                                   if (!this.recordAudioSaveFileDir.exists()) {           // 父文件夹不存在

                                               this.recordAudioSaveFileDir.mkdirs();                 // 创建新的文件夹

                                   }

                       }

 

                       // 取得全部的文件列表

                       this.getRecordFiles();        

                       // 设置单击事件

                       this.stop.setOnClickListener(new StopOnClickListenerImpl());

                       // 设置单击事件

                       this.record.setOnClickListener(new RecordOnClickListenerImpl());

                       // 暂停钮暂时不可用

                       this.stop.setEnabled(false);                                                                    

                       // 设置单击事件

                       this.reclist.setOnItemClickListener(new OnItemClickListenerImpl()); 

            }

            private class RecordOnClickListenerImpl implements OnClickListener {

                       @Override

                       public void onClick(View v) {

                                   // 如果SD卡存在

                                   if (MediaRecorderActivity.this.sdcardExists) {    

                                               // 文件保存名称

                                               MediaRecorderActivity.this.recordAudioSaveFileName =

                                                          MediaRecorderActivity.this.recordAudioSaveFileDir

                                                                      .toString()

                                                                      + File.separator

                                                                      + "MAKYANRecord_"

                                                                      + System.currentTimeMillis() + ".3gp";

                                               // 取得音频文件保存路径

                                               MediaRecorderActivity.this.recordAudioSaveFile = new File(MediaRecorderActivity.this.recordAudioSaveFileName);

                                               // 实例化MediaRecorder

                                               MediaRecorderActivity.this.mediaRecorder = new MediaRecorder();

                                               // 设置录音源为MIC(麦克风)

                                               MediaRecorderActivity.this.mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);            

                                               // 定义输出格式

                                               MediaRecorderActivity.this.mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);    

                                               // 定义音频编码

                                               MediaRecorderActivity.this.mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

                                               // 定义输出文件

                                               MediaRecorderActivity.this.mediaRecorder.setOutputFile(MediaRecorderActivity.this.recordAudioSaveFileName);                          

                                               try {

                                                          // 准备录音

                                                          MediaRecorderActivity.this.mediaRecorder.prepare();

                                               } catch (Exception e) {

                                                          e.printStackTrace();

                                               }

                                               // 开始录音

                                               MediaRecorderActivity.this.mediaRecorder.start();

                                               // 提示信息

                                               MediaRecorderActivity.this.info.setText("正在录音中...");     

                                               // 停止按钮可用

                                               MediaRecorderActivity.this.stop.setEnabled(true);

                                               // 录音按钮禁用

                                               MediaRecorderActivity.this.record.setEnabled(false);

                                               // 正在录音

                                               MediaRecorderActivity.this.isRecord = true;                            

                                   }

                       }

            }

            private class StopOnClickListenerImpl implements OnClickListener {

                       @Override

                       public void onClick(View v) {

                                   // 已经开始录音,则停止

                                   if (MediaRecorder

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值