2014-02-18 73 views
0

你好所有的開發者!在android中點擊seekbar改變進度音樂

(此代碼是媒體播放器與搜索條)

下面的代碼能正常工作,但我想在搜索條變化的進展音樂例如defalt musicplayer的Android

我能做些點擊時?

什麼添加到我的代碼?

public class DoaMatn1 extends Activity implements OnClickListener { 
    MediaPlayer mp; 
    ImageButton btndowndoa; 
    ImageButton btnplaydoa; 
    SeekBar seek_bar; 
    Handler seekHandler = new Handler(); 
    private ProgressDialog pDialog; 
    public static final int progress_bar_type = 0; 
    private static String file_url = "http://upir.ir/files92be/9e6cbb43de76.mp3"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.doamatn); 

     mp = MediaPlayer.create(this,Uri.fromFile(audioFile)); 
     btnplaydoa = (ImageButton) findViewById(R.id.btnplaydoa); 
     btnplaydoa.setOnClickListener(this); 
     btndowndoa = (ImageButton) findViewById(R.id.btndowndoa); 
     btndowndoa.setOnClickListener(this);   
     getInit(); 
     seekUpdation(); 
    } 

    Intent intent = new Intent(android.content.Intent.ACTION_VIEW); 
    File sdcard = Environment.getExternalStorageDirectory(); 
    File audioFile = new File(sdcard.getPath() + "/EBKH/basem-tavasol.mp3"); 

    public void getInit() { 
     if(audioFile.exists()) 
     { 
      seek_bar = (SeekBar) findViewById(R.id.sbdoa); 
      seek_bar.setMax(mp.getDuration()); 
     } 
    } 

    @Override 
    public void onClick(View v) { 
     switch(v.getId()) 
     { 
     case R.id.btnplaydoa : 
      if(audioFile.exists()) 
      { 

        if(mp!=null) 
        { 
         if(mp.isPlaying()) 
         { 
          mp.pause(); 
          btnplaydoa.setImageResource(R.drawable.play); 
         } 
         else 
         { 
         mp.start(); 
          btnplaydoa.setImageResource(R.drawable.pause); 
         } 
        } 
       } 

      break; 

     case R.id.btndowndoa : 

      if(!new File(Environment.getExternalStorageDirectory().toString() + "/EBKH/basem-tavasol.mp3").exists())   
       new DownloadFileFromURL().execute(file_url); 


      break; 
     } 
    } 

    Runnable run = new Runnable() { 

     @Override 
     public void run() { 
      seekUpdation(); 
     } 
    }; 

    public void seekUpdation() { 
     if(audioFile.exists()) 
     { 
      seek_bar.setProgress(mp.getCurrentPosition()); 
      seekHandler.postDelayed(run, 1000); 

     } 
    } 


    @Override 
    public void onBackPressed() { 
     if(mp != null && mp.isPlaying()) { 
      mp.stop(); 
     } 
     super.onBackPressed(); 
    } 

    @Override 
    protected Dialog onCreateDialog(int id) { 
     switch (id) { 
     case progress_bar_type: 
      pDialog = new ProgressDialog(this); 
      pDialog.setMessage("در حال دانلود،لطفا صبور باشید..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setMax(100); 
      pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
      pDialog.setCancelable(true); 
      pDialog.show(); 
      return pDialog; 
     default: 
      return null; 
     } 
    } 
    class DownloadFileFromURL extends AsyncTask<String, String, String> { 

     /** 
     * Before starting background thread 
     * Show Progress Bar Dialog 
     * */ 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      showDialog(progress_bar_type); 
     } 

     /** 
     * Downloading file in background thread 
     * */ 
     @Override 
     protected String doInBackground(String... f_url) { 
      int count; 
      try { 
       URL url = new URL(f_url[0]); 
       URLConnection conection = url.openConnection(); 
       conection.connect(); 
       // getting file length 
       int lenghtOfFile = conection.getContentLength(); 

       // input stream to read file - with 8k buffer 
       InputStream input = new BufferedInputStream(url.openStream(), 8192); 

       // Output stream to write file 
       OutputStream output = new FileOutputStream("/sdcard/EBKH/basem-tavasol.mp3"); 

       byte data[] = new byte[1024]; 

       long total = 0; 

       while ((count = input.read(data)) != -1) { 
        total += count; 
        // publishing the progress.... 
        // After this onProgressUpdate will be called 
        publishProgress(""+(int)((total*100)/lenghtOfFile)); 

        // writing data to file 
        output.write(data, 0, count); 
       } 

       // flushing output 
       output.flush(); 

       // closing streams 
       output.close(); 
       input.close(); 

      } catch (Exception e) { 
       Log.e("Error: ", e.getMessage()); 
      } 

      return null; 
     } 

     /** 
     * Updating progress bar 
     * */ 
     protected void onProgressUpdate(String... progress) { 
      // setting progress percentage 
      pDialog.setProgress(Integer.parseInt(progress[0])); 
     } 

     /** 
     * After completing background task 
     * Dismiss the progress dialog 
     * **/ 
     @Override 
     protected void onPostExecute(String file_url) { 
      // dismiss the dialog after the file was downloaded 
      dismissDialog(progress_bar_type); 
     } 

    } 
} 

回答

0

您必須實現SeekBar.OnSeekBarChangeListener你的課,然後設置監聽器這樣songProgressBar.setOnSeekBarChangeListener(本);而不是執行這些方法:

/*/

@Override 
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) 
    { 

    } 

/** 
* When user starts moving the progress handler 
* */ 
@Override 
public void onStartTrackingTouch(SeekBar seekBar) 
    { 
    // remove message Handler from updating progress bar 
    handler.removeCallbacks(mUpdateTimeTask); 
    } 

/** 
* When user stops moving the progress hanlder 
* */ 
@Override 
public void onStopTrackingTouch(SeekBar seekBar) 
    { 
    handler.removeCallbacks(mUpdateTimeTask); 
    int totalDuration = mediaPlayer.getDuration(); 
    int currentPosition = utils.progressToTimer(seekBar.getProgress(), totalDuration); 

    // forward or backward to certain seconds 
    mediaPlayer.seekTo(currentPosition); 

    // update timer progress again 
    updateProgressBar(); 
    } 

這裏是一個完全工作的媒體播放器實例與搜索條觸摸聽者和歌進度更新的鏈接:

http://www.androidhive.info/2012/03/android-building-audio-player-tutorial/

關於教程,唯一不起作用的是從給定文件路徑中檢索和過濾歌曲。不知怎的,我無法讓它工作。但我發現了另一個解決方案,即編寫您自己的FileFilter。但在你的情況下,你正在使用一個URL,所以沒關係。