如何检测AudioRecord是否被第三方管理应用给禁用了,附上demo
2016-05-07 15:45
639 查看
问题描述
我们在平时在开发中可能会遇到,申请的<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)等等但最终都不能解决问题
终极解决方案
根据分贝值判断当前应用的录音权限是否被第三方应用禁止了项目地址详见[https://github.com/Z644912187/RecordAudioPermissionDetect ]
- 说明:
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方法中重新调用自己的录音操作。相关文章推荐
- 11周 5 项目 - 摩托车继承自行车和机动车
- 基于jquery实现图片放大功能
- Android getScrollX()详解
- 集群环境下如何防止定时任务重复执行?
- 线程与进程
- OpenCV(学习笔记1)-简述
- U盘转换NTFS格式
- es5 reduce()
- iOS收到Push后播放声音和震动
- DAY1 linux 50条命令
- Tomcat在Linux下的安装与配置
- HDU4578 Transformation 线段树
- 从SVN导出指定版本号之间修改的文件
- 浅谈 变量以及函数的声明以及定义,以及对extern “C”的理解
- 【机房合作】职责链模式计算消费时间
- java double类型保留两位小数4种方法
- jQuery Mobile 中的 $
- JAVA面向对象API————List的子类特点概述
- 11周 4 项目 - 教师兼干部类
- html基础知识