时间:2021-05-20
作用
判断手机是否有录音权限的工具类,兼容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; /** * Function:判断录音权限,兼容android6.0以下以及以上系统 * * @author xuzhuyun * @date 2018/5/10 */ public class CheckAudioPermission { /** * 音频获取源 */ public static int audioSource = MediaRecorder.AudioSource.MIC; /** * 设置音频采样率,44100是目前的标准,但是某些设备仍然支持22050,16000,11025 */ public static int sampleRateInHz = 44100; /** * 设置音频的录制的声道CHANNEL_IN_STEREO为双声道,CHANNEL_CONFIGURATION_MONO为单声道 */ public static int channelConfig = AudioFormat.CHANNEL_IN_STEREO; /** * 音频数据格式:PCM 16位每个样本。保证设备支持。PCM 8位每个样本。不一定能得到设备支持。 */ 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(); } /** * 根据开始录音判断是否有录音权限s */ 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; /** * desc:测试录音权限. * steps: * 检测是否有权限--有--执行相关操作 * --无权限-- * <p> * --判断系统版本 * --小于6.0 直接获取 * --大于6.0 动态申请权限 * --对申请结果的处理回调 * <p> * --允许 * <p> * --拒绝 * <p> * test: * test1 build.gradle minsdk <23 真机android7.1 清单文件中配置了录音权限 * test2 build.gradle minsdk >=23 真机android7.1 清单文件中配置了录音权限 * * @author xuzhuyun * @date 2018/5/10 */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如何判断手机是否有录音
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
WEB开发中如何通过Javascript来判断终端为PC、IOS(iphone)、Android呢?可以通过判断浏览器的userAgent,用正则来判断手机是否
本文实例讲述了Android中判断手机是否联网的方法,分享给大家供大家参考。具体步骤如下:首先在AndroidManifest.xml中添加与连接网络相关的权限
Android照相在android中,照相功能系统已经提供,在app中可以直接使用。当手机从androidplay里面下载有照相功能的应用时,会判断手机是否支持
本文实例讲述了Android编程检测手机录音权限是否打开的方法。分享给大家供大家参考,具体如下:6.0之前的权限检测只是检测到是否在清单文件中注册Boolean
本文所述为一个Android的常用技巧代码,主要用于判断手机屏幕是横向或是竖向的,在判断屏幕水平或垂直后你可以对程序做出相应的响应,该实例代码只是判断是否为竖屏