2014-12-04 62 views
0

我的應用程序中有一個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); 
} 

回答

1

你在你的onClick方法設置myAudioRecordernull。嘗試發表評論或者在onCheckedChanged獲得myAudioRecorder的新實例。

+0

泰坦當我做拯救那麼我的個人資料將被保存和dialogfragment返回。所以,在我從對話框片段回來之前,我想要多次記錄,並且我想將它添加到一個文件對象中。你能給我任何工作的例子嗎? – user3764346 2014-12-04 08:53:29

+0

@ user3764346,如果你有其他問題,你應該接受我的答案,如果它對你有幫助,並且簡單地打開另一個問題。 – MeetTitan 2014-12-04 08:56:17

-1

在你的try catch塊你正在做

myAudioRecorder = null; 

嘗試當您使用它再次實例化對象或不把它放在空