Android 在录音方面遇到了一些困难
我的应用程序中有一个复选框和一个按钮。复选框名称是Record meet,start是按钮的名称。但当我检查我的记录时,我会从头到尾记下按钮的名称 当我检查按钮时,录音将开始,当我停止按钮时,录音将停止。当我再次停止按钮时,仅使记录符合被启用并且Android 在录音方面遇到了一些困难,android,checkbox,android-mediarecorder,Android,Checkbox,Android Mediarecorder,我的应用程序中有一个复选框和一个按钮。复选框名称是Record meet,start是按钮的名称。但当我检查我的记录时,我会从头到尾记下按钮的名称 当我检查按钮时,录音将开始,当我停止按钮时,录音将停止。当我再次停止按钮时,仅使记录符合被启用并且setChecked(false)。因为我想再次在我的应用程序中进行录制 在返回之前,我想获取录制的文件,并将其存储在文件对象中 问题是,当我停止按钮时,它会使复选框变为enable,并且setEnable(false)。当我再次单击复选框时,我不幸地停
setChecked(false)
。因为我想再次在我的应用程序中进行录制
在返回之前,我想获取录制的文件,并将其存储在文件对象中
问题是,当我停止按钮时,它会使复选框变为enable,并且setEnable(false)
。当我再次单击复选框时,我不幸地停止了。错误指向myAudioRecorder.prepare()
有人能帮我解决这个问题吗
这是我的密码
final CheckBox check=(CheckBox) rootView.findViewById(R.id.recordcheckbox);
check.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
shouldRecord=true;
toggle.setText("stop");
check.setEnabled(false);
try {
myAudioRecorder.prepare();
myAudioRecorder.start();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Toast.makeText(getActivity(), "Recording started", Toast.LENGTH_SHORT).show();
String format = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf =new SimpleDateFormat(format, Locale.US);
meet_start=sdf.format(Calendar.getInstance().getTime());
Log.i("start_time",meet_start);
} else {
}
}
});
toggle = (Button) rootView.findViewById(R.id.toggleButton1);
toggle.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(shouldRecord=false)
{
if(toggle.getText().equals("start"))
{
String format = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf1 =new SimpleDateFormat(format, Locale.US);
start_time = sdf1.format(Calendar.getInstance().getTime());
Log.i("start_time",actualstart);
toggle.setText("stop");
}
}
else if(shouldRecord=true)
{
if(toggle.getText().equals("stop"))
{
shouldRecord = false;
toggle.setText("start");
check.setEnabled(true);
check.setChecked(false);
String format = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf =new SimpleDateFormat(format, Locale.US);
actualend = sdf.format(Calendar.getInstance().getTime());
Log.i("end_time",actualend);
shouldRecord = false;
try{
myAudioRecorder.stop();
myAudioRecorder.release();
myAudioRecorder = null;
}
catch(Exception e)
{
System.out.print("error");
}
Toast.makeText(getActivity(), "Recording stopped", Toast.LENGTH_SHORT).show();
addRecordingToMediaLibrary();
}
}
}
});
public void addRecordingToMediaLibrary() {
// TODO Auto-generated method stub
ContentValues values = new ContentValues();
long current = System.currentTimeMillis();
values.put(MediaStore.Audio.Media.TITLE, "audio" + file.getName());
values.put(MediaStore.Audio.Media.DATE_ADDED, (int) (current / 1000));
values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/3gpp");
values.put(MediaStore.Audio.Media.DATA, file.getAbsolutePath());
ContentResolver contentResolver = getActivity().getContentResolver();
Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Uri newUri = contentResolver.insert(base, values);
}
您正在onClick
方法中将myAudioRecorder
设置为null
。尝试在您正在执行的Try-catch块中的onCheckedChanged
中对其进行注释或获取一个新的myAudioRecorder实例
myAudioRecorder = null;
当您使用该对象时,请尝试再次实例化该对象,或者当我保存该对象时,请不要将其设置为nullTitan,然后我的详细信息将被保存,dialogfragment将返回。所以,在我从dialogfragment返回之前,我想做多次记录,并将其添加到一个文件对象中。你能给我举个有效的例子吗?@user3764346,如果我的回答对你有帮助的话,你应该接受我的回答,如果你有其他问题的话,只需打开另一个问题。