【移动应用开发技术】Android中怎么检测手机录音权限是否打开_第1页
【移动应用开发技术】Android中怎么检测手机录音权限是否打开_第2页
【移动应用开发技术】Android中怎么检测手机录音权限是否打开_第3页
【移动应用开发技术】Android中怎么检测手机录音权限是否打开_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论