2015-01-06 58 views
1

在我的alart对话框中,我想从SDcard播放mp3并更新seekbar。其工作正常与以下代码。但Seekbar Ontouchlistener不工作,像向前倒带mp3。Android自定义提醒对话框mediaplayer seekbar

可能maiin活动:

public class MainActivity extends Activity { 
private MediaPlayer mediaPlayer = new MediaPlayer(); 
SeekBar seekBarProgress; 
ImageButton buttonPlayPause; 
private int mediaFileLengthInMilliseconds; 
private final Handler handler = new Handler(); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

Button button = (Button) findViewById(R.id.button); 

     button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 

      final Dialog dialog = new Dialog(MainActivity.this); 
      dialog.setContentView(R.layout.popup_ringtones); 
      dialog.setTitle("Title..."); 

      buttonPlayPause = (ImageButton) dialog.findViewById(R.id.play); 
      seekBarProgress = (SeekBar) dialog.findViewById(R.id.SeekBarTestPlay); 

      seekBarProgress.setProgress(0); 
      seekBarProgress.setMax(100); 
       dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { 

        @Override 
        public void onDismiss(DialogInterface dialog) { 
         mediaPlayer.pause(); 
       } 
       }); 

       buttonPlayPause.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        try { 
         if (mediaPlayer.isPlaying()) { 
          mediaPlayer.stop(); 
          mediaPlayer.release(); 
          mediaPlayer = new MediaPlayer(); 
         } 

         AssetFileDescriptor descriptor = getAssets().openFd("a.mp3"); 
         mediaPlayer.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength()); 
         descriptor.close(); 

         mediaPlayer.prepare(); 
         mediaPlayer.setVolume(1f, 1f); 
         mediaPlayer.setLooping(true); 
         mediaPlayer.start(); 
         primarySeekBarProgressUpdater(); 

        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
        mediaFileLengthInMilliseconds = mediaPlayer.getDuration(); 
       } 
      }); 

      dialog.show(); 
      } 
     }); 

    } 


private void primarySeekBarProgressUpdater() { 
    seekBarProgress.setProgress((int)(((float)mediaPlayer.getCurrentPosition()/mediaFileLengthInMilliseconds)*100)); // This math construction give a percentage of "was playing"/"song length" 
    if (mediaPlayer.isPlaying()) { 
     Runnable notification = new Runnable() { 
      public void run() { 
       primarySeekBarProgressUpdater(); 
      } 
     }; 
     handler.postDelayed(notification,1000); 
    } 
} 
} 

我想ontouch搜索条更新歌曲,我如何能实现?

+0

我在同样的事情股票实施setOnSeekBarChangeListener,请你用完整的答案更新你的问题,谢谢 – Sasa

回答

2

你必须在你的搜索条这样

playerSeekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 

       @Override 
       public void onStopTrackingTouch(SeekBar seekBar) { 

       } 

       @Override 
       public void onStartTrackingTouch(SeekBar seekBar) { 

       } 

       @Override 
       public void onProgressChanged(SeekBar seekBar, int progress, 
         boolean fromUser) { 
        if (fromUser) { 
         mMediaPlayer.seekTo(progress); 
         updateTime(); 
        } 
       } 
      }); 
+0

确定..是什么录入();现在onclick它开始播放从开始..不是位置 – Higginslpert

+2

现在工作我添加int playPositionInMillisecconds =(mediaFileLengthInMilliseconds/100)* seekBarProgress.getProgress(); \t \t \t \t \t \t mediaPlayer.seekTo(playPositionInMillisecconds); – Higginslpert

+1

updateTime();是你放置逻辑的地方,如果你在警告对话框中显示1:23的播放时间,可能是因为你没有以广义的方式使用setOnSeekBarChangeListener,这就是它从开始开始的原因 –