java.lang.RuntimeException: setAudioSource failed.异常解决
出现原因:Android录制声音,异常提示
问题代码:mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);//设置音频源 音频资源获取方式
声音录制必然需要两个权限,声音录制权限和文件写入权限,在Android6.0以后这两个权限都需要动态申请,
解决步骤如下:
一、配置AndroidManifest.xml的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/>
二、动态权限申请
/** * 权限申请 */ private void checkPermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { String[] permissions = new String[]{Manifest.permission.RECORD_AUDIO,Manifest.permission.WRITE_EXTERNAL_STORAGE}; for (String permission : permissions) { if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, permissions, 200); return; } } } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && requestCode == 200) { for (int i = 0; i < permissions.length; i++) { if (grantResults[i] != PackageManager.PERMISSION_GRANTED) { Intent intent = new Intent(); intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", getPackageName(), null); intent.setData(uri); startActivityForResult(intent, 200); return; } } } } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK && requestCode == 200) { checkPermission(); } }
然后在onCreate()方法里面调用checkPermission()即可。
这时就不会报错了。