服务器之家

服务器之家 > 正文

Android如何判断手机是否有录音权限的工具类

时间:2022-03-07 14:40     来源/作者:hgncxzy_

作用

判断手机是否有录音权限的工具类,兼容6.0以上以及以下android系统

测试环境

这篇文章是评论中的网友提出质疑后,经过重写修改与重写测试后编写的,我的调试环境是小米note3,Android7.1的系统。

记得在清单文件中配置对应的权限。

思路

检测是否有权限

-->有权限--执行相关操作

-->无权限-- 判断系统版本

--大于等于6.0 --动态申请权限

-->对申请结果的回调处理
--允许
--拒绝

代码

工具类CheckAudioPermission.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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如何判断手机是否有录音

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/jdfkldjlkjdl/article/details/54618739

标签:

相关文章

热门资讯

2022年最旺的微信头像大全 微信头像2022年最新版图片
2022年最旺的微信头像大全 微信头像2022年最新版图片 2022-01-10
蜘蛛侠3英雄无归3正片免费播放 蜘蛛侠3在线观看免费高清完整
蜘蛛侠3英雄无归3正片免费播放 蜘蛛侠3在线观看免费高清完整 2021-08-24
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
返回顶部