美文网首页Android开发Android进阶之路Android技术知识
检测AudioRecord是否被第三方管理应用禁用(附demo)

检测AudioRecord是否被第三方管理应用禁用(附demo)

作者: Android架构 | 来源:发表于2019-02-14 20:56 被阅读4次

问题描述

我们在平时在开发中可能会遇到,申请的<uses-permission android:name="android.permission.RECORD_AUDIO"/>被第三方给禁用了,如被小米的自带的“安全中心”给禁用了,这时该如何检测AudioRecord是否被第三方管理应用给禁用了呢?

网上有很多方案,如

方法一:

MediaRecorder可以给prepare和start方法加try catch判断是否获得了录音权限。但是这招在AudioRecord上却不起效,并不会抛异常。

方法二:

public boolean checkRecordAudioPermission() { 
      PackageManager pm = getPackageManager(); 
      boolean permission = (PackageManager.PERMISSION_GRANTED 
          == pm.checkPermission("android.permission.RECORD_AUDIO", "packageName"));
      return permission;} 

但是你会发现返回的结果永远都是true。貌似这只能判断Manifest是否有注册权限,而不能判断权限是否被系统禁用了。

方法三:

Context.checkSelfPermission( permission_name)等等但最终都不能解决问题

终极解决方案

根据分贝值判断当前应用的录音权限是否被第三方应用禁止了
源码

  • 说明:
    RecordAudioPermissionDetect关键的类
  • 使用:
public class MainActivity extends AppCompatActivity implements RecordAudioPermissionDetect.onPermitRecordListener { 
      private static final String TAG = "MainActivity"; 
      private RecordAudioPermissionDetect mRecordAudioPermissionDetect; 
      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main); 
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);                                                       
            setSupportActionBar(toolbar); 
            mRecordAudioPermissionDetect = new RecordAudioPermissionDetect(this); 
            FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
            fab.setOnClickListener(new View.OnClickListener() { 
                 @Override public void onClick(View view) {                  
                 mRecordAudioPermissionDetect.startCheckRecordPermission(); 
                  } 
            }); 
      } 
      @Override 
      protected void onResume() { 
             super.onResume(); 
             mRecordAudioPermissionDetect.startCheckRecordPermission();
       } 
      @Override 
      protected void onPause() { 
            super.onPause(); 
            mRecordAudioPermissionDetect.stopCheck(); 
      } 
      @Override 
      public void isPermit(boolean flag) { 
            if (!flag) { 
               mRecordAudioPermissionDetect.showMissingPermissionDialog(this); 
            } else { 
            //TODO 注意 重新调用自己的录音操作 
            }
      }
}

注意:我们在使用的过程中,由于一台设备的麦克风资源只有一个,因此主要在isPermit方法中重新调用自己的录音操作。

【附录】

资料图

需要资料的朋友可以加入Android架构交流QQ群聊:513088520

点击链接加入群聊【Android移动架构总群】:加入群聊

获取免费学习视频,学习大纲另外还有像高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)等Android高阶开发资料免费分享。

相关文章

  • 检测AudioRecord是否被第三方管理应用禁用(附demo)

    问题描述 我们在平时在开发中可能会遇到,申请的 被第三方给禁用了,如被小米的自带的“安全中心”给禁用了,这时该如何...

  • 如何检测AudioRecord是否被第三方管理应用给禁用了,附上

    问题描述 我们在平时在开发中可能会遇到,申请的 被第三方给禁用了,如被小米的自带的“安全中心”给禁用了,这时该如何...

  • iOS给类设置属性,是否禁用第三方键盘

    iOS可以给类设置属性iOS可以设置是否禁用第三方键盘,以及针对个别页面是否禁用第三方键盘 //为类别设置属性 /...

  • openURL/canOpenURL,URL Schemes

    openURL表示打开第三方应用, canOpenURL表示检查是否可以打开第三方应用,即是否有安装第三方应用。如...

  • tomcat防护

    1.禁止自动部署 配置自动部署,容易被部署恶意或未经测试的应用程序,应将其禁用 2.tomcat目录权限检测 在运...

  • iOS / 键盘控制

    iOS开发禁用第三方键盘,强制使用系统键盘 - 简书 [iOS 禁用第三方输入法] 禁用第三方输入法+Extens...

  • pod 组件

    含第三方库的组件 本地检测代码仓库是否有问题 远程检测代码仓库是否有问题 向远程代码索引库提交spec 不含第三方...

  • AudioRecord详解

    写在前面:AudioRecord 类的主要功能是让各种应用层应用能够管理音频资源,以便它们通过此类能够录制平台的声...

  • Cocoapods组件化记录

    组件化demo到其他工程可以pod使用步骤 建cocoapods模版demo: 检测模版工程是否可以使用: 模版工...

  • 【安全与逆向】- APP安全防护

    代理检测 在自己的应用里检测当前手机是否设置了代理,如果设置者禁止应用的网络请求,达到被抓包的目的。 第一种通过手...

网友评论

    本文标题:检测AudioRecord是否被第三方管理应用禁用(附demo)

    本文链接:https://www.haomeiwen.com/subject/lhvyeqtx.html