热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

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

这篇文章主要为大家详细介绍了Android判断手机是否有录音的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

作用

判断手机是否有录音权限的工具类,兼容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:
 * 检测是否有权限--有--执行相关操作
 * --无权限--
 * 

* --判断系统版本 * --小于6.0 直接获取 * --大于6.0 动态申请权限 * --对申请结果的处理回调 *

* --允许 *

* --拒绝 *

* 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

源码下载:Android如何判断手机是否有录音

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


推荐阅读
  • 深度兴趣网络在点击率预测中的应用研究
    本文探讨了一种名为深度兴趣网络(Deep Interest Network, DIN)的新方法,该方法通过捕捉用户的历史行为和当前上下文之间的交互来提高点击率预测的准确性。DIN模型不仅考虑了用户的静态偏好,还动态地调整了对不同商品的兴趣权重,从而实现了更加个性化的推荐。 ... [详细]
  • Only2 Labs 是一家专注于视觉设计的工作室,如果您对当前的设计感到不满,或者急需寻找一个可靠的设计合作伙伴,甚至是您的团队项目需要专业指导,Only2 Labs 都将竭诚为您提供帮助。 ... [详细]
  • 本文探讨了HDU 4035的问题,涉及一个由n个房间组成的迷宫,这些房间通过n-1条隧道相互连接,形成一棵树结构。任务是从起点1号房间出发,计算到达出口所需经过的平均隧道数量,考虑了在每个房间中可能发生的三种情况及其相应概率。 ... [详细]
  • 本文探讨了在iOS应用中实现类似Android Snack Bar功能的方法,并特别关注如何确保Snack Bar正确显示在键盘下方。 ... [详细]
  • SQL注入实验:SqliLabs第38至45关解析
    本文深入探讨了SqliLabs项目中的第38至45关,重点讲解了堆叠注入(Stacked Queries)的应用技巧及防御策略。通过实际案例分析,帮助读者理解如何利用和防范此类SQL注入攻击。 ... [详细]
  • KKCMS代码审计初探
    本文主要介绍了KKCMS的安装过程及其基本功能,重点分析了该系统中存在的验证码重用、SQL注入及XSS等安全问题。适合初学者作为入门指南。 ... [详细]
  • 使用Inno Setup将EXE与JRE封装为Windows安装程序
    本文详细介绍了如何利用Inno Setup工具将EXE文件及Java运行环境(JRE)整合为适用于Windows操作系统的安装程序。我们将提供必要的软件下载链接,并逐步指导您完成整个打包过程。 ... [详细]
  • 本文探讨了为何采用RESTful架构及其优势,特别是在现代Web应用开发中的重要性。通过前后端分离和统一接口设计,RESTful API能够提高开发效率,支持多种客户端,并简化维护。 ... [详细]
  • 本文提供了中国三大主要通信运营商(中国联通、中国电信和中国移动)的官方邮箱服务网站链接,帮助用户快速访问并管理个人邮件,同时介绍了如何设置短信提醒功能。 ... [详细]
  • Linux环境下Memcached安装指南
    本文详细介绍如何在Linux虚拟机上安装Memcached,包括必要的依赖库安装,以及使用Xshell进行文件传输的具体步骤。 ... [详细]
  • 使用Adobe Illustrator打造独特的家族徽章:牡鹿图腾设计教程
    本文详细介绍了一种基于《权力的游戏》灵感,运用Adobe Illustrator创作独特家族图腾——牡鹿徽章的方法。本教程不仅展示了具体的步骤,还提供了多种技巧,帮助读者创作出既具个人特色又符合设计原则的作品。 ... [详细]
  • 本文探讨了在安卓设备上的微信H5环境中,如何解决长按图片时无法保存或分享Base64编码图片及Blob形式图片的问题,并提供了有效的解决方案。 ... [详细]
  • 本文探讨了Tomcat在启动过程中遇到的‘严重: Null组件’警告,并提供了解决此问题的方法,特别是当Tomcat使用的JRE版本低于应用所需版本时的处理方案。 ... [详细]
  • 本文详细探讨了电脑重装操作系统后无法访问网络邻居的原因及解决方案,包括检查网络配置、权限设置等多个方面。 ... [详细]
  • 本文介绍了如何在 Linux 系统上构建网络路由器,特别关注于使用 Zebra 软件实现动态路由功能。通过具体的案例,展示了如何配置 RIP 和 OSPF 协议,以及如何利用多路由器查看工具(MRLG)监控网络状态。 ... [详细]
author-avatar
有风吹过best
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有