问题描述
我们在平时在开发中可能会遇到,申请的<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方法中重新调用自己的录音操作。
【附录】
![](https://img.haomeiwen.com/i15490417/24c8b436ecb5c635.png)
需要资料的朋友可以加入Android架构交流QQ群聊:513088520
点击链接加入群聊【Android移动架构总群】:加入群聊
获取免费学习视频,学习大纲另外还有像高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)等Android高阶开发资料免费分享。
网友评论