作用
判断手机是否有录音权限的工具类,兼容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;
public class CheckAudioPermission {
public static int audioSource = MediaRecorder.AudioSource.MIC;
public static int sampleRateInHz = 44100;
public static int channelConfig = AudioFormat.CHANNEL_IN_STEREO;
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();
}
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;
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");
}
}
}
源码下载:Android如何判断手机是否有录音
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



