本文实例讲述了Android编程检测手机录音权限是否打开的方法。分享给大家供大家参考,具体如下:

6.0之前的权限检测只是检测到是否在清单文件中注册

Boolean flag = (PackageManager.PERMISSION_GRANTED ==

pm.checkPermission("android.permission.RECORD_AUDIO", "包名"));

Boolean flag = PermissionChecker.checkSelfPermission(this, Manifest.permission.)== PermissionChecker.PERMISSION_GRANTED;

if (flag){

ToastUtil.showMessage("有权限");

} else {

ToastUtil.showMessage("无权限");

return;

}

在6.0系统一下 无论是关闭或者打开app的录音权限都能获取到权限,6.0以上则正常,后来发现是6.0以后google加强了权限管理

public class CheckPermissionUtils {

/**

*获取app的录音权限是否打开

*android 6.0version以上 传统方法不适合 以此兼容

* @param context

*/

public static Boolean isHasAudioRecordPermission(Context context) {

// 音频获取源

int audioSource = MediaRecorder.AudioSource.MIC;

// 设置音频采样率,44100是目前的标准,但是某些设备仍然支持22050,16000,11025

int sampleRateInHz = 44100;

// 设置音频的录制的声道CHANNEL_IN_STEREO为双声道,CHANNEL_CONFIGURATION_MONO为单声道

int channelConfig = AudioFormat.CHANNEL_IN_STEREO;

// 音频数据格式:PCM 16位每个样本。保证设备支持。PCM 8位每个样本。不一定能得到设备支持。

int audioFormat = AudioFormat.ENCODING_PCM_16BIT;

// 缓冲区字节大小

int bufferSizeInBytes = 0;

bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz,

channelConfig, audioFormat);

AudioRecord audioRecord = new AudioRecord(audioSource, sampleRateInHz,

channelConfig, audioFormat, bufferSizeInBytes);

//开始录制音频

try{

// 防止某些手机崩溃,例如联想

audioRecord.startRecording();

}

catch (IllegalStateException e){

e.printStackTrace();

}

/**

* 根据开始录音判断是否有录音权限

*/

if (audioRecord.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING) {

return false;

}

audioRecord.stop();

audioRecord.release();

audioRecord = null;

return true;

}

}

最后一种,测试没问题。

public class CheckPermissionUtils {

private static final String TAG = "CheckPermissionUtils";

private static CheckPermissionUtils checkPermissionUtils = new CheckPermissionUtils();

static final int SAMPLE_RATE_IN_HZ = 44100;

static final int BUFFER_SIZE = AudioRecord.getMinBufferSize(

SAMPLE_RATE_IN_HZ, AudioFormat.CHANNEL_IN_DEFAULT,

AudioFormat.ENCODING_PCM_16BIT);

private AudioRecord mAudioRecord;

Boolean isGetVoiceRun;

private Object mLock;

private int count=0;

private Boolean isHasPermission;

private CheckPermissionUtils() {

mLock = new Object();

}

public static CheckPermissionUtils getinstance() {

if (checkPermissionUtils == null) {

checkPermissionUtils = new CheckPermissionUtils();

}

return checkPermissionUtils;

}

public Boolean isHasAudioRecordingPermission(Context context) {

isHasPermission=false;

count=0;

mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,

SAMPLE_RATE_IN_HZ, AudioFormat.CHANNEL_IN_DEFAULT,

AudioFormat.ENCODING_PCM_16BIT, BUFFER_SIZE);

if (mAudioRecord == null) {

Log.e("sound", "mAudioRecord初始化失败");

}

isGetVoiceRun = true;

try {

// new Thread(new Runnable() {

// @Override

// public void run() {

mAudioRecord.startRecording();

short[] buffer = new short[BUFFER_SIZE];

while (isGetVoiceRun) {

count++;

if (count++>10) {

isGetVoiceRun=false;

}

//r是实际读取的数据长度,一般而言r会小于buffersize

int r = mAudioRecord.read(buffer, 0, BUFFER_SIZE);

long v = 0;

// 将 buffer 内容取出,进行平方和运算

for (int i = 0; i < buffer.length; i++) {

v += buffer[i] * buffer[i];

}

// 平方和除以数据总长度,得到音量大小。

double mean = v / (double) r;

double volume = 10 * Math.log10(mean);

Log.d(TAG, "-------分贝值:" +volume+"----v"+v+"------r"+r );

if (v>0&&r>0) {

//有录音

isHasPermission=true;

return isHasPermission;

}

// 大概一秒十次

synchronized (mLock) {

try {

mLock.wait(5);

}

catch (InterruptedException e) {

e.printStackTrace();

}

}

}

mAudioRecord.stop();

mAudioRecord.release();

mAudioRecord = null;

// }

//}).start();

}

catch (Exception e) {

}

return isHasPermission;

}

}

希望本文所述对大家Android程序设计有所帮助。

android 录音权限 代码打开,Android编程检测手机录音权限是否打开的方法相关推荐

  1. android获取录音读写权限设置,Android编程检测手机录音权限是否打开的方法

    本文实例讲述了Android编程检测手机录音权限是否打开的方法.分享给大家供大家参考,具体如下: 6.0之前的权限检测只是检测到是否在清单文件中注册 Boolean flag = (PackageMa ...

  2. android怎么导出代码吗,Android studio代码怎么导出为HTML格式?

    Android studio的开发的过程中,而想把的代码文件进行发送给别人看,是不可能直接把拷贝给被人的话,直接拷贝给别人话,格式会发生变化的,那么直接查看代码是不直观的,那么就需要进行导出HTML的 ...

  3. android计算dpi代码_android计算pad或手机的分辨率/像素/密度/屏幕尺寸/DPI值的方法...

    手机分辨率基础知识(DPI,DIP计算) 1.术语和概念 术语 说明 备注 Screen size(屏幕尺寸) 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 摩托 ...

  4. android音频驱动目录,手机录音在哪个文件夹_安卓手机录音保存路径 - 驱动管家...

    安卓手机录音在哪个文件夹?几乎所有的手机都支持录音功能,虽然可以在录音机里面看到录音记录,想要将其拷贝出来却需要费一番心思去寻找,当然,我们也可以换一个思路,利用分享功能让安卓自动拷贝文件上传到指定客 ...

  5. android 如何制作可编辑的表格,在手机wps中编辑表格的方法

    我们可以在手机版本的wps中对表格进行编辑,对于新手来说可能不知如何操作,下面就让学习啦小编告诉你如何在手机wps中编辑表格的方法,希望对大家有所帮助. 在手机wps中编辑表格的方法 首先,下载并安装 ...

  6. 华为照片权限在哪里找_华为手机位置权限在哪里打开

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 华为位置权限的开启步骤是: 1.首先在手机桌面上打开设置应用. 2.在设置里找到应用选项,点击进入下一个界面. 3.找到权限管理, ...

  7. android自动拨号 代码,在Android上,是否有一种方法可以强行自动自动拨号?_android_开发99编程知识库...

    我一直在研究一个 Android 应用 概念,在用户启动服务时,应用程序必须自动拨号. 我发现,当应用程序尝试自动拨号时,手机( 还是叫 Intent ) 不会自动拨号,而用户必须手动启动服务. 目前 ...

  8. android studio同步代码块,Android Studio快捷键大全

    Ctrl+P 提示有效说明参数 Ait + Enter 提示 Ctrl+Ait+L 格式化 Ctrl+Y 删除本行 Alt + Shift + Up/Down 上下移动本行代码 Alt + Ctrl ...

  9. android锁屏代码分析,Android 监听锁屏、解锁、开屏 功能代码

    1.首先定义 ScreenListener package com.app.lib; import android.content.BroadcastReceiver; import android. ...

最新文章

  1. Go 语言学习笔记(一):基础知识
  2. WPF企业内训全程实录(下)
  3. app engine_App Engine中的Google Services身份验证,第2部分
  4. 原理解析 | 深入了解 Apache Flink 的网络协议栈
  5. wpf 代码获取contextmenu_[C#] 转:在WPF里面获取右键弹出菜单(ContextMenu)的鼠标点击源(Owner)控件...
  6. 能“看穿”换脸视频背后的AI模型,Facebook的反Deepfake方法有点东西
  7. PowerShell 查询 Excel记录
  8. Android文字图像识别并翻译的简单实现
  9. 微信公众号生成个性化推广二维码
  10. 英语语法学习--名词
  11. linux 查看文件命令
  12. 第六次前端培训(JavaScript的基础语法(二))
  13. 交互式多模型-扩展卡尔曼滤波IMM-EKF——机动目标跟踪中的应用
  14. svnsync报错Failed to get lock on destination repos解决办法
  15. (一)虚拟化及云原生基本概念及原理解析
  16. video dispose
  17. WiFi功耗管理(三)(U-APSD)
  18. SYMBIAN Carbide C++ sisx真机程序生成过程
  19. 三菱PLC SER DESR 数据检索指令
  20. AndroidVideoCache优化

热门文章

  1. DAY09_继承拼图游戏案例
  2. Emotet木马病毒升级,对抗杀毒软件的能力再次增强
  3. 我的第一台电脑------计算机类专业学生购置电脑的一些个人心得
  4. 公立互联网医院的运营现状之便民服务:由点及面
  5. 灵飞经4 西城八部 第十八章 暗通款曲(二)
  6. Power bi 3.7 折线图
  7. 蓝海与红海--有感于软件创新
  8. 基于昇思MindSpore的同元软控AI系列工具箱正式发布,大幅度降低产品研发成本
  9. 获取url地址的方法
  10. 单片机控制DS18B20自制简易电子温度计(测试通过)(二)