檢測AudioRecord是否被第三方管理應用禁用(附demo)
問題描述
我們在平時在開發中可能會遇到,申請的< 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高階開發資料免費分享。