下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】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();
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 加气设备出售协议书模板
- 毕业生网签协议书范本
- 保安宿舍管理协议书模板
- 新人入职自我介绍模版
- 2024集体所有制企业有些【乡村集体所有制企业职工劳动合同】
- 2024BT工程建设合同及回购协议
- 2024策划营销代理合同
- 2024企业并购合同模板
- 江西丰城市第二中学2021-2022学年高三考前热身物理试卷含解析
- 2024年日历表电子版(带农历-含周数-周一开始-打印版)
- 《矢量运算》ppt课件
- SPC八大控制图自动生成器v1.01
- 化学课堂教学评价量表(共3页)
- 小学思政课教师队伍建设情况调研报告
- 《计量经济学》超全题库及答案(完整版)
- 交警大队交通安全宣传工作总结
- TDT 1041 土地整治工程质量检验与评定规程附表
- 质量验收管理
- 亲子关系诊断测验原量表
- 小学心理健康教育实验学校申报材料
- (最新整理)设计院保密管理制度
评论
0/150
提交评论