arthinking

Just do it

判断Android手机是否有录音

作用

判断手机是否有录音权限的工具类,兼容6.0以上以及以下android系统

测试环境

这篇文章是评论中的网友提出质疑后,经过重写修改与重写测试后编写的,我的调试环境是小米note3,Android7.1的系统。

记得在清单文件中配置对应的权限。

思路

检测是否有权限

-->有权限--执行相关操作

-->无权限-- 判断系统版本

--大于等于6.0 --动态申请权限

-->对申请结果的回调处理
--允许

--拒绝


代码

工具类CheckAudioPermission.java

package com.example.a002034.testaudioperrmission;

import android.content.Context;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;

/**
 * Function:判断录音权限,兼容android6.0以下以及以上系统
 *
 * @author xuzhuyun
 * @date 2018/5/10
 */

public class CheckAudioPermission {
    /**
     * 音频获取源
     */
    public static int audioSource = MediaRecorder.AudioSource.MIC;
    /**
     * 设置音频采样率,44100是目前的标准,但是某些设备仍然支持22050,16000,11025
     */
    public static int sampleRateInHz = 44100;

    /**
     * 设置音频的录制的声道CHANNEL_IN_STEREO为双声道,CHANNEL_CONFIGURATION_MONO为单声道
     */
    public static int channelConfig = AudioFormat.CHANNEL_IN_STEREO;
    /**
     * 音频数据格式:PCM 16位每个样本。保证设备支持。PCM 8位每个样本。不一定能得到设备支持。
     */
    public static int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
    /**
     * 缓冲区字节大小
     */
    public static int bufferSizeInBytes = 0;

    public static AudioRecord audioRecord;


    /**
     * 判断是是否有录音权限.
     */
    public static boolean isHasPermission(final Context context) {
        bufferSizeInBytes = 0;
        bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz,
                channelConfig, audioFormat);
        if (audioRecord == null) {
            audioRecord = new AudioRecord(audioSource, sampleRateInHz, channelConfig, audioFormat, bufferSizeInBytes);

        }
        //开始录制音频
        try {
            // 防止某些手机崩溃,例如联想
            audioRecord.startRecording();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        }

        /**
         * 根据开始录音判断是否有录音权限s
         */
        if (audioRecord.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING) {
            return false;
        }
        audioRecord.stop();
        //释放资源
        audioRecord.release();
        audioRecord = null;

        return true;
    }

}

测试类MainActivity

package com.example.a002034.testaudioperrmission;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

/**
 * desc:测试录音权限.
 * steps:
 * 检测是否有权限--有--执行相关操作
 * --无权限--
 * <p>
 * --判断系统版本
 * --小于6.0 直接获取
 * --大于6.0 动态申请权限
 * --对申请结果的处理回调
 * <p>
 * --允许
 * <p>
 * --拒绝
 * <p>
 * test:
 * test1 build.gradle minsdk <23    真机android7.1 清单文件中配置了录音权限
 * test2 build.gradle minsdk >=23    真机android7.1 清单文件中配置了录音权限
 *
 * @author xuzhuyun
 * @date 2018/5/10
 */
public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //检测是否有录音权限
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO)
                != PackageManager.PERMISSION_GRANTED) {
            Log.i(TAG, "默认无录音权限");
            if (Build.VERSION.SDK_INT >= 23) {
                Log.i(TAG, "系统版本不低于android6.0 ,需要动态申请权限");
                requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO}, 1001);
            }
        } else {
            Log.i(TAG, "默认有录音权限");
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                           @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 1001) {
            //方式一校验
            boolean isHasAudioPermission = CheckAudioPermission.isHasPermission(this);
            Log.i(TAG, "申请权限完毕,当前录音权限:" + isHasAudioPermission);
            //方式二校验
            int result = 0;
            for (int i = 0; i < grantResults.length; i++) {
                if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
                    result++;
                }
            }
            if (result != permissions.length) {
                //没有权限
                Log.i(TAG, "onRequestPermissionsResult: 申请权限完毕,当前录音权限:false");
                return;
            }
            //有权限
            Log.i(TAG, "onRequestPermissionsResult: 申请后,是否有权限:true");
        }
    }

}

源码下载

https://download.csdn.net/download/jdfkldjlkjdl/10405148


阅读更多

扫码向博主提问

去开通我的Chat快问

jdfkldjlkjdl

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • JAVA
  • Android
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jdfkldjlkjdl/article/details/54618739
个人分类: 工具类 Android 权限
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭