美文网首页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)

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