接上一篇文章,[Android多媒体一]调用系统相机拍照并存储到指定位置,适配安卓 7.0
本文讲述如何调用系统录音机,完成录音后,对录音进行指定位置的保存。
一、开始编写
首先,还是理清一下思路,在着手编写代码。
1、启动系统录音机并保存到指定位置依然设计读写权限,此时需要向用户请求权限,并根据用户操作进行相应的动作。录音使用到的权限有:
<!-- 读写权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 录音权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
2、将录音文件保存到SD的指定位置,需要创建一定的目录层级,像上一篇文章讲述的一样,这次,把录音文件保存为SD根目录下的TestDir/voice/xxx.amr。
3、根据用户录音的结果,进行存储操作。
4、不同于启动相机拍照,这次,不把uri加入到启动录音机的额外数据,因为不管加还是不加,录音成功后,获取到的uri都是系统存放刚刚的录音文件的uri。
废话不多说,直接上代码:
主界面布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="拍照并保存" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="录音并保存" />
</LinearLayout>
MainActivity代码:
package com.my.example.multimediatest;
import android.Manifest;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.StrictMode;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.FileProvider;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
public static final String SD_APP_DIR_NAME = "TestDir"; //存储程序在外部SD卡上的根目录的名字
public static final String PHOTO_DIR_NAME = "photo"; //存储照片在根目录下的文件夹名字
public static final String VOICE_DIR_NAME = "voice"; //存储音频在根目录下的文件夹名字
public static final String VID