問題描述
我們在平時(shí)在開發(fā)中可能會(huì)遇到,申請的<uses-permission android:name="android.permission.RECORD_AUDIO"/>被第三方給禁用了苛茂,如被小米的自帶的“安全中心”給禁用了狸棍,這時(shí)該如何檢測AudioRecord是否被第三方管理應(yīng)用給禁用了呢?
網(wǎng)上有很多方案味悄,如
方法一:
MediaRecorder可以給prepare和start方法加try catch判斷是否獲得了錄音權(quán)限草戈。但是這招在AudioRecord上卻不起效,并不會(huì)拋異常侍瑟。
方法二:
public boolean checkRecordAudioPermission() {
PackageManager pm = getPackageManager();
boolean permission = (PackageManager.PERMISSION_GRANTED
== pm.checkPermission("android.permission.RECORD_AUDIO", "packageName"));
return permission;}
但是你會(huì)發(fā)現(xiàn)返回的結(jié)果永遠(yuǎn)都是true唐片。貌似這只能判斷Manifest是否有注冊權(quán)限,而不能判斷權(quán)限是否被系統(tǒng)禁用了涨颜。
方法..:
Context.checkSelfPermission( permission_name)等等但最終都不能解決問題
終極解決方案
根據(jù)分貝值判斷當(dāng)前應(yīng)用的錄音權(quán)限是否被第三方應(yīng)用禁止了
源碼
- 說明:
RecordAudioPermissionDetect關(guān)鍵的類 - 使用:
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 注意 重新調(diào)用自己的錄音操作
}
}
}