本文共 3342 字,大约阅读时间需要 11 分钟。
android-本地音播放,加载自己的本地音乐!在线音乐学习中。。。。。
package com.example.service_play;
import android.annotation.SuppressLint;
import android.content.ComponentName; import android.content.Intent; import android.content.ServiceConnection; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.SeekBar;public class MainActivity extends AppCompatActivity {
private MyConnection conn;private MusicService.MyBinder musicControl;private Button playBtn;private SeekBar seekBar;private static final int UPDATE_PROGRESS = 0;//使用handler定时更新进度条@SuppressLint(value = "HandlerLeak")private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case UPDATE_PROGRESS: updateProgress(); break; } }};@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); playBtn = (Button) findViewById(R.id.play); seekBar = (SeekBar) findViewById(R.id.sb); Intent intent3 = new Intent(this, MusicService.class); conn = new MyConnection(); //使用混合的方法开启服务, startService(intent3); bindService(intent3, (ServiceConnection) conn, BIND_AUTO_CREATE); seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { //进度条改变 if (fromUser){ musicControl.seekTo(progress); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { //开始触摸进度条 } @Override public void onStopTrackingTouch(SeekBar seekBar) { //停止触摸进度条 } });}private class MyConnection implements ServiceConnection { //服务启动完成后会进入到这个方法 @Override public void onServiceConnected(ComponentName name, IBinder service) { //获得service中的MyBinder musicControl = (MusicService.MyBinder) service; //更新按钮的文字 updatePlayText(); //设置进度条的最大值 seekBar.setMax(musicControl.getDuration()); //设置进度条的进度 seekBar.setProgress(musicControl.getCurrenPostion()); } @Override public void onServiceDisconnected(ComponentName name) { }}@Overrideprotected void onResume() { super.onResume(); //进入到界面后开始更新进度条 if (musicControl != null){ handler.sendEmptyMessage(UPDATE_PROGRESS); }}@Overrideprotected void onDestroy() { super.onDestroy(); //退出应用后与service解除绑定 unbindService(conn);}@Overrideprotected void onStop() { super.onStop(); //停止更新进度条的进度 handler.removeCallbacksAndMessages(null);}//更新进度条private void updateProgress() { int currenPostion = musicControl.getCurrenPostion(); seekBar.setProgress(currenPostion); //使用Handler每500毫秒更新一次进度条 handler.sendEmptyMessageDelayed(UPDATE_PROGRESS, 500);}//更新按钮的文字public void updatePlayText() { if (musicControl.isPlaying()) { playBtn.setText("暂停"); handler.sendEmptyMessage(UPDATE_PROGRESS); } else { playBtn.setText("播放"); }}//调用MyBinder中的play()方法public void play(View view) { musicControl.play(); updatePlayText();}
}
转载地址:http://jkegn.baihongyu.com/