android 录音权限 代码打开,Android编程检测手机录音权限是否打开的方法
本文实例讲述了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编程检测手机录音权限是否打开的方法相关推荐
- android获取录音读写权限设置,Android编程检测手机录音权限是否打开的方法
本文实例讲述了Android编程检测手机录音权限是否打开的方法.分享给大家供大家参考,具体如下: 6.0之前的权限检测只是检测到是否在清单文件中注册 Boolean flag = (PackageMa ...
- android怎么导出代码吗,Android studio代码怎么导出为HTML格式?
Android studio的开发的过程中,而想把的代码文件进行发送给别人看,是不可能直接把拷贝给被人的话,直接拷贝给别人话,格式会发生变化的,那么直接查看代码是不直观的,那么就需要进行导出HTML的 ...
- android计算dpi代码_android计算pad或手机的分辨率/像素/密度/屏幕尺寸/DPI值的方法...
手机分辨率基础知识(DPI,DIP计算) 1.术语和概念 术语 说明 备注 Screen size(屏幕尺寸) 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 摩托 ...
- android音频驱动目录,手机录音在哪个文件夹_安卓手机录音保存路径 - 驱动管家...
安卓手机录音在哪个文件夹?几乎所有的手机都支持录音功能,虽然可以在录音机里面看到录音记录,想要将其拷贝出来却需要费一番心思去寻找,当然,我们也可以换一个思路,利用分享功能让安卓自动拷贝文件上传到指定客 ...
- android 如何制作可编辑的表格,在手机wps中编辑表格的方法
我们可以在手机版本的wps中对表格进行编辑,对于新手来说可能不知如何操作,下面就让学习啦小编告诉你如何在手机wps中编辑表格的方法,希望对大家有所帮助. 在手机wps中编辑表格的方法 首先,下载并安装 ...
- 华为照片权限在哪里找_华为手机位置权限在哪里打开
大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 华为位置权限的开启步骤是: 1.首先在手机桌面上打开设置应用. 2.在设置里找到应用选项,点击进入下一个界面. 3.找到权限管理, ...
- android自动拨号 代码,在Android上,是否有一种方法可以强行自动自动拨号?_android_开发99编程知识库...
我一直在研究一个 Android 应用 概念,在用户启动服务时,应用程序必须自动拨号. 我发现,当应用程序尝试自动拨号时,手机( 还是叫 Intent ) 不会自动拨号,而用户必须手动启动服务. 目前 ...
- android studio同步代码块,Android Studio快捷键大全
Ctrl+P 提示有效说明参数 Ait + Enter 提示 Ctrl+Ait+L 格式化 Ctrl+Y 删除本行 Alt + Shift + Up/Down 上下移动本行代码 Alt + Ctrl ...
- android锁屏代码分析,Android 监听锁屏、解锁、开屏 功能代码
1.首先定义 ScreenListener package com.app.lib; import android.content.BroadcastReceiver; import android. ...
最新文章
- Go 语言学习笔记(一):基础知识
- WPF企业内训全程实录(下)
- app engine_App Engine中的Google Services身份验证,第2部分
- 原理解析 | 深入了解 Apache Flink 的网络协议栈
- wpf 代码获取contextmenu_[C#] 转:在WPF里面获取右键弹出菜单(ContextMenu)的鼠标点击源(Owner)控件...
- 能“看穿”换脸视频背后的AI模型,Facebook的反Deepfake方法有点东西
- PowerShell 查询 Excel记录
- Android文字图像识别并翻译的简单实现
- 微信公众号生成个性化推广二维码
- 英语语法学习--名词
- linux 查看文件命令
- 第六次前端培训(JavaScript的基础语法(二))
- 交互式多模型-扩展卡尔曼滤波IMM-EKF——机动目标跟踪中的应用
- svnsync报错Failed to get lock on destination repos解决办法
- (一)虚拟化及云原生基本概念及原理解析
- video dispose
- WiFi功耗管理(三)(U-APSD)
- SYMBIAN Carbide C++ sisx真机程序生成过程
- 三菱PLC SER DESR 数据检索指令
- AndroidVideoCache优化