2010-11-23 183 views
0

我有,录音机和播放器,我可以录音,然后录制的音频可以播放,音频播放时,我希望我的seekbar拇指平稳移动,但目前它没有流畅的移动也快速切换播放有时会因为说非法状态而导致我的应用程序失败:任何人都请为我的音频播放器提出一个解决方案。 recding没有PBLMAndroid音频播放器

public class RecorderActivity extends Activity{ 
    public static int   AUDIO_RECORDING_RESULT=0; 
public static int  FROM_AUDIO_RECDING_HOME=0; 
public static int  FROM_AUDIO_RECDING_SEARCH=0; 
public static int  FROM_AUDIO_RECDING=0; 

private static MediaRecorder     recorder; 
    private static Button      recd_stop_audio; 
    private static Button      audio_play_pause; 
    private static Chronometer     audio_recding_time; 
    private static Chronometer     audio_playtime_begin; 
    private static TextView      audio_playtime_end; 
    public static int       audio_play_pause_flag   = 1; 
    private static int       audio_recding_stop_flag  = 1; 
    private static SeekBar      audio_seekbar_play_indication; 
    private static View       v1; 
    private static View  v2; 
    private static View  v3; 
    private static TextView  textview_audio_information_grade; 
    private static TextView      textview_audio_information1; 
    private static TextView      textview_audio_information2_1; 
    private static TextView      textview_audio_information2_2; 
    private static TextView      textview_audio_information2; 
    private static TextView      textview_audio_information3; 
    private static int       audio_seekbar_progress; 
    private static int       audio_seekbar_incr; 
    private Button        continue_audio; 
    private static Button      delete_recding; 
    private static MediaPlayer     mp; 
    private static int       audio_paused_flag    = 0; 
    private static TextView      txt_audio_serviceprovidername; 


public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.audio); 
    MyCustomesData.context=RecorderActivity.this; 
    final AlertDialog.Builder builder = new AlertDialog.Builder(RecorderActivity.this); 
    audio_paused_flag=0; 
    FROM_AUDIO_RECDING=0; 
    AUDIO_RECORDING_RESULT=0; 

    MyCustomesData.sumitAReport_PAGE=MyCustomesConstants.USER_AUDIO; 
    continue_audio = (Button) findViewById(R.id.Button_Voice_Record_Continue); 
    textview_audio_information_grade=(TextView)findViewById(R.id.Description_grade); 
     textview_audio_information1 = (TextView) findViewById(R.id.Description); 
     textview_audio_information2 = (TextView) findViewById(R.id.Description2); 
     textview_audio_information2_1=(TextView)findViewById(R.id.Description2_1); 
     textview_audio_information2_2=(TextView)findViewById(R.id.Description2_2); 
     textview_audio_information3= (TextView)findViewById(R.id.Description3); 
     v1 = (View) findViewById(R.id.View1); 
     v2 = (View) findViewById(R.id.View22); 
     v3= (View) findViewById(R.id.View33); 
     audio_seekbar_play_indication = (SeekBar) findViewById(R.id.SeekBar01); 
     audio_playtime_begin = (Chronometer) findViewById(R.id.TimerStart); 
     audio_playtime_end = (TextView) findViewById(R.id.TimerStop); 
     audio_recding_time = (Chronometer) findViewById(R.id.Rec_Timer_ID); 
     recorder = new MediaRecorder(); 
     recd_stop_audio = (Button) findViewById(R.id.Button_record_sound); 
     audio_play_pause = (Button) findViewById(R.id.Button_Play_Sound); 
     delete_recding = (Button) findViewById(R.id.Button_Delete_Sound); 
     txt_audio_serviceprovidername=(TextView)findViewById(R.id.TextView_Audio_Provider); 
     txt_audio_serviceprovidername.setText(MyCustomesData.MyCustomesListContext.getProviderName()); 
     audio_seekbar_play_indication.setOnClickListener(null); 
     audio_seekbar_play_indication.setEnabled(false); 
     audio_play_pause.setEnabled(false); 
      delete_recding.setEnabled(false); 
     showHelpInformation(); 

     if(MyCustomesData.MyCustomesListContext.isAudioRecd()) 
     { 
      showRecdingInformation(); 
      audio_play_pause.setEnabled(true); 
      delete_recding.setEnabled(true); 
     } 

      recd_stop_audio.setOnClickListener(new OnClickListener() { 

       public void onClick(View v) { 
        if (audio_recding_stop_flag == 0) { 

        audiorecding(); 

        } else { 

        audiorecding(); 

        } 

       } 
      }); 

      audio_play_pause.setOnClickListener(new OnClickListener() { 

       public void onClick(View v) { 
       playaudio(); 
          } 
      }); 
      audio_recding_time.setOnChronometerTickListener(new OnChronometerTickListener() { 

    public void onChronometerTick(Chronometer chronometer) { 
    if(chronometer.getText().equals("02:00")) 
    { 
     audiorecding(); 
    } 

    } 
    }); 
     **//UPDATING SEEKBAR USING CHRONOMETER** 
      audio_playtime_begin.setOnChronometerTickListener(new OnChronometerTickListener() { 

       public void onChronometerTick(Chronometer chronometer) { 

       if(!audio_playtime_begin.getText().equals("00:00")) 
       { 
       audio_seekbar_play_indication.setProgress(audio_seekbar_progress); 
        audio_seekbar_progress = audio_seekbar_progress + audio_seekbar_incr; 

       } 
       else 
       audio_seekbar_progress=1; 


       } 
      }); 



      delete_recding.setOnClickListener(new OnClickListener() { 

       public void onClick(View v) { 

        audio_seekbar_progress = 1; 
          if (mp != null) { 
          if (audio_play_pause_flag == 0) { 
          audio_play_pause_flag =1; 
          audio_playtime_begin.stop(); 
          mp.stop(); 
          mp.reset(); 
          mp.release(); 
          audio_play_pause.setBackgroundResource(R.drawable.play1); 

          } 
         } 

         recorder = new MediaRecorder(); 
         v1.setVisibility(View.VISIBLE); 
         v2.setVisibility(View.VISIBLE); 
         recd_stop_audio.setEnabled(true); 
         audio_play_pause.setEnabled(false); 
         delete_recding.setEnabled(false); 
          audio_play_pause.setBackgroundResource(R.drawable.play1); 
         audio_play_pause_flag = 1; 
        audio_playtime_begin.stop(); 
        audio_playtime_begin.setBase(SystemClock.elapsedRealtime()); 
        audio_paused_flag = 0; 
         audio_playtime_end.setText("00:00"); // Seekbar End Time 
         audio_recding_time.setBase(SystemClock.elapsedRealtime()); // Recording time 
         audio_seekbar_play_indication.setProgress(0); 
         MyCustomesData.MyCustomesListContext.setAudioRecd(false); 
         showHelpInformation(); 


       } 
      }); 

      continue_audio.setOnClickListener(new OnClickListener() { 

       public void onClick(View v) { 
       System.out.println("The Staus of report"+MyCustomesData.MyCustomesListContext.isAudioRecd()+":"+MyCustomesData.MyCustomesListContext.getTextReport()); 

       if (audio_recding_stop_flag == 0) 
       { 
       audiorecding(); 
       } 
       if(audio_play_pause_flag == 0) 
       { 
       mp.stop(); 
        mp.reset(); 
        mp.release(); 
        audio_seekbar_play_indication.setProgress(100); //Max value 
        audio_playtime_begin.stop(); 
         audio_play_pause_flag = 1; 
        audio_play_pause.setBackgroundResource(R.drawable.play1); 
       } 
       StringBuffer txtReport=new StringBuffer(MyCustomesData.MyCustomesListContext.getTextReport()); 
       String txtreport=new String(txtReport); 
       txtreport=txtreport.trim(); 
      if(!MyCustomesData.MyCustomesListContext.isAudioRecd()&&txtreport.length()==0) 
      { 

       builder.setMessage("xxxxxxxxxxxxxxxx.").setCancelable(false).setPositiveButton("OK", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          dialog.cancel(); 
          FROM_AUDIO_RECDING=0; 
         AUDIO_RECORDING_RESULT=0; 
         finish(); 
         } 
        }); 

        AlertDialog alert = builder.create(); 
        alert.setTitle("Attention"); 
        alert.setIcon(R.drawable.alert_dialog_icon); 
        alert.show(); 
      } 

      else 
       { 
       AUDIO_RECORDING_RESULT=1; 
       finish(); 

       } 

       } 

      }); 


} 
    static void audiorecding() 
    { 

      audio_play_pause.setEnabled(false); 
      delete_recding.setEnabled(false); 

     if (audio_recding_stop_flag == 0) { 




      int maxtime = audio_seekbar_play_indication.getMax(); 
     audio_recding_stop_flag = 1; 
     audio_recding_time.stop(); 
      recorder.stop(); 
      recorder.reset(); 
      recorder.release(); 
      audio_seekbar_progress = 1; 
      recd_stop_audio.setBackgroundResource(R.drawable.rec_btn); 
      audio_play_pause.setEnabled(true); 
      delete_recding.setEnabled(true); 

      MyCustomesData.MyCustomesListContext.setAudioRecd(true); 
      if(audio_recding_time.getText().equals("00:00")) 
      { 
      audio_recding_time.setText("00:01"); 
      MyCustomesData.MyCustomesListContext.setAudioRecdingTime("00:01"); 
      } 
      else 

      MyCustomesData.MyCustomesListContext.setAudioRecdingTime(audio_recding_time.getText().toString()); 

      showRecdingInformation(); 

     } 
     else { 


      audio_recding_stop_flag = 0; 


      try { 
      showHelpInformation(); 
      audio_playtime_begin.setBase(SystemClock.elapsedRealtime()); 
       audio_playtime_end.setText("00:00"); 
       audio_seekbar_play_indication.setProgress(0); 
      MyCustomesListMain.path = InitialValueLoader.sanitizePath("MyCustomAudio/VoiceReport"); 
       InitialValueLoader.filecheck(MyCustomesListMain.path); 
       audio_play_pause.setEnabled(false); 
       delete_recding.setEnabled(false); 
       recd_stop_audio.setBackgroundResource(R.drawable.recording_stop); 
       audio_recding_time.setBase(SystemClock.elapsedRealtime()); 

       recorder.release(); 
       audio_recding_time.start(); 
       recorder = new MediaRecorder(); 
       recorder.setAudioSource(MediaRecorder.AudioSource.MIC); // AudioSource 
       recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); // OutputFormat 
       recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
       recorder.setOutputFile(MyCustomesListMain.path); 
       recorder.prepare(); 
       recorder.start(); 

      } catch (Exception e) { 
       e.printStackTrace(); 
       recorder.reset(); 
       recorder.release(); 
      } 

    } 
    } 
    private static void playaudio() 
    { 


      showRecdingInformation(); 

      recd_stop_audio.setEnabled(false); 
       if (audio_play_pause_flag == 1) { 
       audio_play_pause_flag = 0; 
       v2.setVisibility(View.GONE); 
       audio_playtime_end.setText(audio_recding_time.getText()); 
       audio_play_pause.setBackgroundResource(R.drawable.play2); 

        if (audio_paused_flag == 1) { 
         audio_paused_flag = 0; 

         int stoppedMilliseconds = 0; 

         String chronoText = audio_playtime_begin.getText().toString(); 
         String array[] = chronoText.split(":"); 
         if (array.length == 2) { 
          stoppedMilliseconds = Integer.parseInt(array[0]) * 60 * 1000 
           + Integer.parseInt(array[1]) * 1000; 
         } else if (array.length == 3) { 
          stoppedMilliseconds = Integer.parseInt(array[0]) * 60 * 60 * 1000 
           + Integer.parseInt(array[1]) * 60 * 1000 
           + Integer.parseInt(array[2]) * 1000; 
         } 
         stoppedMilliseconds=stoppedMilliseconds+1000; 
         audio_playtime_begin.setBase(SystemClock.elapsedRealtime() - stoppedMilliseconds); 
         audio_seekbar_progress=audio_seekbar_progress - 1; 
         audio_playtime_begin.start(); 
         mp.start(); 


        } else 

        { 
         v2.setVisibility(View.GONE); 
         try { 

          audio_play_pause.setBackgroundResource(R.drawable.play2); 
          audio_seekbar_progress = 1; 
                audio_seekbar_play_indication.setMax(getTotalAudioRecdingTime(MyCustomesData.MyCustomesListContext.getAudioRecdingTime())); 
          audio_play_pause.setBackgroundResource(R.drawable.play2); 
          audio_playtime_end.setText(MyCustomesData.MyCustomesListContext.getAudioRecdingTime()); 
          audio_seekbar_incr = 1; 
          audio_playtime_begin.setBase(SystemClock.elapsedRealtime()); 
          audio_seekbar_play_indication.setProgress(0); 
          audio_playtime_begin.start(); 
          mp = new MediaPlayer(); 
          mp.setOnCompletionListener(new OnCompletionListener() { 

      public void onCompletion(MediaPlayer mp) { 
       mp.stop(); 
          mp.reset(); 
          mp.release(); 

          audio_playtime_begin.stop(); 
          audio_seekbar_play_indication.setProgress(0); 
          audio_playtime_begin.setText(MyCustomesData.MyCustomesListContext.getAudioRecdingTime()); 
          audio_seekbar_play_indication.setProgress(getTotalAudioRecdingTime(MyCustomesData.MyCustomesListContext.getAudioRecdingTime())); //Max value 
          audio_play_pause_flag = 1; 
           audio_play_pause.setBackgroundResource(R.drawable.play1); 
          recd_stop_audio.setEnabled(true); 
      } 
      }); 


          mp.setDataSource(MyCustomesListMain.path); 
          mp.prepare(); 
          mp.start(); 

         } catch (Exception e) { 

          e.printStackTrace(); 
          mp.stop(); 
          mp.reset(); 
          mp.release(); 
          audio_playtime_begin.stop(); 



         } 

        } 

      } 

      else 

      { 
      System.out.println("Audio Palyer Paused>>>>>>>>"); 
       audio_play_pause_flag = 1; 
       audio_paused_flag = 1; 
       audio_play_pause.setBackgroundResource(R.drawable.play1); 
       audio_playtime_begin.stop(); 

       mp.pause(); 

      } 

    } 
    private static int getTotalAudioRecdingTime(String recdingtime) 
    { 
    int timeM=Integer.valueOf(recdingtime.substring(0, 2)); 
    System.out.println("The Minute"+timeM); 
    int timeS=Integer.valueOf(recdingtime.substring(3, 5)); 
    int totaltimeinS=timeM*60+timeS; 
    return totaltimeinS; 
    } 

    private static void showHelpInformation() 
    { 


    } 

    private static void showRecdingInformation() 
    { 



    } 


} 
+0

什么问题? – yuku 2010-11-23 09:49:58

+1

2个愿望:1。改善你的问题,这是难以理解的(尝试使用点和逗号)和2。请减少粘贴代码到你试图更新你的seekbar – WarrenFaith 2010-11-23 09:50:43

回答

0

你的代码是安静难以理解...... 建议您按照WarrenFaith的建议:)

总之,根据你的问题,我已经明白以下。

  1. seekbar不光滑。
  2. 使用音频播放器的UI小部件很快就会导致崩溃。

对于1.将进度条增加0.5而不是1.这将平滑进度条。

对于2.我认为你需要把这个崩溃转储放在这里......这样我们可以试着找出真正的根本原因......但是不要转储整个logcat。

干杯!