在Android 11中,MediaRecorder启动失败的错误码-1004通常是由于权限问题引起的。在Android 11及以上版本中,需要确保在使用MediaRecorder之前已经获取了适当的权限。
以下是一种解决方法,使用了运行时权限来获取适当的权限:
private static final int REQUEST_PERMISSION_CODE = 1;
private static final String[] PERMISSIONS = {
Manifest.permission.RECORD_AUDIO,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
// 检查并请求权限
private void checkAndRequestPermissions() {
List deniedPermissions = new ArrayList<>();
for (String permission : PERMISSIONS) {
if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
deniedPermissions.add(permission);
}
}
if (!deniedPermissions.isEmpty()) {
ActivityCompat.requestPermissions(this, deniedPermissions.toArray(new String[deniedPermissions.size()]), REQUEST_PERMISSION_CODE);
} else {
startRecording();
}
}
// 处理权限请求的结果
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_PERMISSION_CODE) {
boolean allGranted = true;
for (int grantResult : grantResults) {
if (grantResult != PackageManager.PERMISSION_GRANTED) {
allGranted = false;
break;
}
}
if (allGranted) {
startRecording();
} else {
// 权限请求被拒绝
Toast.makeText(this, "权限被拒绝,无法录制音频", Toast.LENGTH_SHORT).show();
}
}
}
// 开始录制
private void startRecording() {
// 在这里进行录制操作
MediaRecorder mediaRecorder = new MediaRecorder();
// 设置MediaRecorder的一些参数
// ...
try {
mediaRecorder.prepare();
mediaRecorder.start();
} catch (Exception e) {
e.printStackTrace();
// 处理启动失败的情况
}
}
通过以上代码,您可以在应用运行时检查并请求所需的权限。如果用户授予了所需的权限,将会开始录制操作。如果权限被拒绝,可以根据需要做出相应的处理。
请注意,上述代码仅提供了基本的权限检查和请求的示例,您可能需要根据您的实际需求进行修改和完善。