面对录音带来的一些困难

时间:2014-12-04 08:32:56

标签: android checkbox android-mediarecorder

我的应用程序中有一个CheckBox和一个按钮。 CheckBox名称是Record meet,start是按钮的名称。但是,当我检查我的记录时,我会从开始到停止按钮的名称。

当我检查按钮时,将开始录制,当我停止按钮时,录制将停止。当我再次停止按钮时,只启用记录会议并setChecked(false)。因为我想再次在我的应用程序中进行录制。

在回去之前,我想获取录制的文件,我想将其存储在文件对象中。

问题是,当我停止按钮时,它将启用复选框和setEnable(false)。当我再次点击复选框时,我会收到unfortunately stopped。该错误指向myAudioRecorder.prepare()

enter image description here

有人可以帮我解决这个问题。

这是我的代码。

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);   
}

2 个答案:

答案 0 :(得分:1)

您在myAudioRecorder方法中将null设置为onClick。请尝试对其进行评论或在myAudioRecorder中获取onCheckedChanged的新实例。

答案 1 :(得分:-1)

在你正在尝试的catch块中

 myAudioRecorder = null;

尝试在使用它时再次实例化该对象,或者不要将其置于null