Android studio MediaRecorder在.start()上出现异常错误,不记录任何内容
我正在制作一个简单的录音应用程序。当我点击“麦克风”按钮(意思是录制)时,突出显示的祝酒词就会出现。如果我删除了try/catch,应用程序会崩溃并出现异常 这个问题似乎很常见,但我没有找到解决方案 这是我的主要活动代码Android studio MediaRecorder在.start()上出现异常错误,不记录任何内容,android-studio,exception,mediarecorder,Android Studio,Exception,Mediarecorder,我正在制作一个简单的录音应用程序。当我点击“麦克风”按钮(意思是录制)时,突出显示的祝酒词就会出现。如果我删除了try/catch,应用程序会崩溃并出现异常 这个问题似乎很常见,但我没有找到解决方案 这是我的主要活动代码 public class MainActivity extends AppCompatActivity { Button microphone, play, stopRecording, stopPlay; String outputFile = "
public class MainActivity extends AppCompatActivity {
Button microphone, play, stopRecording, stopPlay;
String outputFile = "";
MediaRecorder myAudioRecorder;
MediaPlayer mediaPlayer;
final int REQUEST_PERMISSION_CODE = 1000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (!checkPermission()){
requestPermission();
}
microphone = findViewById(R.id.microphone);
play = findViewById(R.id.play);
stopPlay = findViewById(R.id.stopPlay);
stopRecording = findViewById(R.id.stopRecording);
play.setEnabled(false);
stopPlay.setEnabled(false);
stopRecording.setEnabled(false);
microphone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (checkPermission()){
outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + UUID.randomUUID().toString()+"_recording.3gp";
setUpMediaRecorder();
try {
myAudioRecorder.prepare();
myAudioRecorder.start();
Toast.makeText(getApplicationContext(), "Recording started", Toast.LENGTH_LONG).show();
} catch (IllegalStateException ise) {
Toast.makeText(getApplicationContext(), "Illegal state exception", Toast.LENGTH_LONG).show();
} catch (IOException ioe) {
Toast.makeText(getApplicationContext(), "THIS TOAST SHOWS ON CLICKING START WHICH MEANS IOEXCEPTION", Toast.LENGTH_LONG).show();
}
stopRecording.setEnabled(true);
} else{
requestPermission();
}
}
});
stopRecording.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myAudioRecorder.stop();
myAudioRecorder.release();
myAudioRecorder = null;
microphone.setEnabled(true);
stopRecording.setEnabled(false);
play.setEnabled(true);
Toast.makeText(getApplicationContext(), "Recording stopped", Toast.LENGTH_LONG).show();
}
});
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource(outputFile);
mediaPlayer.prepare();
}catch (Exception e){
// What
}
mediaPlayer.start();
}
});
stopPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mediaPlayer.isPlaying()){
mediaPlayer.stop();
mediaPlayer.release();
setUpMediaRecorder();
}
}
});
}
private void setUpMediaRecorder (){
myAudioRecorder = new MediaRecorder();
myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
myAudioRecorder.setOutputFile(outputFile);
}
private void requestPermission(){
ActivityCompat.requestPermissions(this,new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.RECORD_AUDIO
}, REQUEST_PERMISSION_CODE);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode)
{
case REQUEST_PERMISSION_CODE:
{
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
Toast.makeText(getApplicationContext(),"Permission Granted", Toast.LENGTH_SHORT).show();
else
Toast.makeText(getApplicationContext(),"Permission D", Toast.LENGTH_SHORT).show();
}
break;
}
}
private boolean checkPermission(){
// code to check permission
}
我在清单文件中添加了存储和录制音频权限,因此我不确定哪里出了问题。任何帮助都将不胜感激