2017-10-15 15 views
0

enter image description here メディアプレイヤーをゼロから設計するので、曲が終了するとシークバーを初期値に設定します。 私は、これはアンドロイドは、初期設定にシークバーを設定し、再生ボタンをトグルすると、音楽が終了すると一時停止します。

seekBar.setProgress(0) で行うことができます知っているが、これは私と一緒に動作しないと私は再生ボタンは、ボタンを一時停止するために戻って切り替えたいと歌よりも、再びユーザプレイの曲であれば正常に再生されます ここにメディアプレーヤーの私のコードであり、あなたはそれを配置する方法とは何かを教えてくれることを願って

public class MusicPlayerActivity extends AppCompatActivity implements Runnable, 
     SeekBar.OnSeekBarChangeListener { 
ImageView playpause; 
SeekBar seekBar; 
MediaPlayer mp = null; 
int len = 0; 
boolean isPlaying = false; 


public MusicPlayerActivity() throws IOException { 
} 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_music_player); 
    String url = getIntent().getExtras().getString("musicurl"); 
    playpause = (ImageView)findViewById(R.id.imageView); 
    seekBar = (SeekBar)findViewById(R.id.seekBar); 
    playpause.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      if(!isPlaying){ 
       playpause.setImageResource(R.drawable.pause); 
       mp.pause(); 
       len = mp.getCurrentPosition(); 
       seekBar.setEnabled(false); 


      }else{ 
       playpause.setImageResource(R.drawable.play); 
       mp.seekTo(len); 
       mp.start(); 
       seekBar.setEnabled(true); 

      } 
      isPlaying = !isPlaying; 



     } 
    }); 

    mp = new MediaPlayer(); 
    try { 
     mp.setDataSource(url); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    try { 
     mp.prepare(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    //if(mp.isPlaying()) mp.stop(); mp.release(); 
    mp.start(); 
    seekBar.setMax(mp.getDuration()); 
    new Thread(this).start(); 
    // Toast.makeText(this, mp.getDuration(), Toast.LENGTH_SHORT).show(); 


} 

//if(mp.isPlaying()){} 
@Override 
public void onProgressChanged(SeekBar seekBar, int progress, 
           boolean fromUser) { 
    try { 
     if (mp.isPlaying() || mp != null) { 
      if (fromUser) 
       mp.seekTo(progress); 
     } else if (mp == null) { 
      Toast.makeText(getApplicationContext(), "Media is not running", 
        Toast.LENGTH_SHORT).show(); 
      seekBar.setProgress(0); 
     } 
    } catch (Exception e) { 
     Log.e("seek bar", "" + e); 
     seekBar.setEnabled(false); 

    } 
} 

@Override 
public void onStartTrackingTouch(SeekBar seekBar) { 

} 

@Override 
public void onStopTrackingTouch(SeekBar seekBar) { 

} 

public void run() { 
    int currentPosition = mp.getCurrentPosition(); 
    int total = mp.getDuration(); 

    while (mp != null && currentPosition < total) { 
     try { 
      Thread.sleep(1000); 
      currentPosition = mp.getCurrentPosition(); 
     } catch (InterruptedException e) { 
      return; 
     } catch (Exception e) { 
      return; 
     } 
     seekBar.setProgress(currentPosition); 
    } 
} 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      mp.stop(); 
      startActivity(new Intent(this,MainActivity.class)); 
      break; 
    } 
    return true; 
} 
@Override 
public void onBackPressed() { 
    Intent mainActivity = new Intent(Intent.ACTION_MAIN); 
    mainActivity.addCategory(Intent.CATEGORY_HOME); 
    mainActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(mainActivity); 
} 

}

答えて

0

あなたはリスナーを設定されていません。seekbar.setOnSeekBarChangeListener(this)

0

そうonProgressChanged()が呼び出されませんあなたのonCreateseekbar.setOnSeekBarChangeListener(this);を追加します。お使いのメディアプレーヤーのインスタンスに

設定OnCompletionListener:プログレスバーは、次のアプローチに見てリセットするには

。メディアファイルの再生が完了すると、OnCompletion(MediaPlayer mp)コールバック関数で必要な処理を実行できます。

mp.start()の前に次のコードスニペットを追加するとうまくいくはずです。

mp.setOnCompletionListener(new OnCompletionListener() { 

      @Override 
      public void onCompletion(MediaPlayer mp) { 
       seekBar.setProgress(0); // sets seekbar to initial position. 
       toggleViews();//implement this function to toggle your play/pause button 

      } 

     }); 
+0

は、多くの親愛なるありがとうございました! –

関連する問題