首页 > 系统 > Android > 正文

Android百度音乐盒框架的完成

2019-11-07 22:59:00
字体:
来源:转载
供稿:网友
MainAcitivity:package com.itheima74.budumusicmode;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.SeekBar;public class MainActivity extends AppCompatActivity { PRivate MyConn mConn; private Iservice mIservice; private static SeekBar sb; public static Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg) { // 获取数据 Bundle bundle = msg.getData(); int duration = bundle.getInt("duration"); int currentPosition = bundle.getInt("currentPosition"); // seekBar实时更新进度 sb.setMax(duration); sb.setProgress(currentPosition); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化seekBar sb = (SeekBar) findViewById(R.id.sb); // 设置seekBar触摸监听,拖哪播哪 sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { // 进度发生改变的回调 @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { } @Override public void onStartTrackingTouch(SeekBar seekBar) { } // 停止拖动的回调 @Override public void onStopTrackingTouch(SeekBar seekBar) { mIservice.callSeekToPosition(seekBar.getProgress()); } }); // 1.start方式开启服务,保证服务在后台长期运行 Intent intent = new Intent(this, BaiduMusicService.class); startService(intent); // 2.bind方式连接服务,拿到中间人对象,获取服务里的方法 mConn = new MyConn(); bindService(intent, mConn, BIND_AUTO_CREATE); } // 3.调用服务里的方法 public void playMusic(View view) { mIservice.callPlayMusic(); } public void pauseMusic(View view) { mIservice.callPauseMusic(); } public void replayMusic(View view) { mIservice.callReplayMusic(); } @Override protected void onDestroy() { unbindService(mConn); super.onDestroy(); } class MyConn implements ServiceConnection { @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { // 拿到中间人对象 mIservice = (Iservice) iBinder; } @Override public void onServiceDisconnected(ComponentName componentName) { } }}BaiduMusicService :package com.itheima74.budumusicmode;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.os.Binder;import android.os.Bundle;import android.os.Environment;import android.os.IBinder;import android.os.Message;import android.support.annotation.Nullable;import java.io.IOException;import java.util.Timer;import java.util.TimerTask;/** * Created by My on 2016/11/26. */public class BaiduMusicService extends Service { private MediaPlayer mediaPlayer; @Nullable @Override public IBinder onBind(Intent intent) { return new MyBinder(); } @Override public void onCreate() { super.onCreate(); // 创建MediaPlayer对象 mediaPlayer = new MediaPlayer(); } @Override public void onDestroy() { super.onDestroy(); } private void playMusic() { System.out.println("音乐播放了"); try { mediaPlayer.reset(); // 注意:此处4.4手机需要加上读SD卡的权限 mediaPlayer.setDataSource(Environment.getExternalStorageDirectory() + "/xpg.mp3"); mediaPlayer.prepare(); mediaPlayer.start(); // 更新seekBar最大进度及当前进度 updateSeekBar(); } catch (IOException e) { e.printStackTrace(); } } private void updateSeekBar() { // 获取音乐总长度 final int duration = mediaPlayer.getDuration(); // 300毫秒后,每隔一秒读取一次播放进度 Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { int currentPosition = mediaPlayer.getCurrentPosition(); // 将总长度及当前进度实时传递给SeekBar Message message = Message.obtain(); Bundle bundle = new Bundle(); bundle.putInt("duration", duration); bundle.putInt("currentPosition", currentPosition); message.setData(bundle); MainActivity.mHandler.sendMessage(message); } }, 300, 1000); } private void pauseMusic() { System.out.println("音乐暂停了"); mediaPlayer.pause(); } private void replayMusic() { System.out.println("音乐继续播放了"); mediaPlayer.start(); } /** * 拖哪播哪 * * @param position 拖动的当前进度 */ private void seekToPosition(int position) { mediaPlayer.seekTo(position); } private class MyBinder extends Binder implements Iservice { public void callPlayMusic() { playMusic(); } public void callPauseMusic() { pauseMusic(); } public void callReplayMusic() { replayMusic(); } @Override public void callSeekToPosition(int position) { seekToPosition(position); } }}Iservice :package com.itheima74.budumusicmode;/** * Created by My on 2016/11/26. */public interface Iservice { public void callPlayMusic(); public void callPauseMusic(); public void callReplayMusic(); public void callSeekToPosition(int position);}

这里写图片描述


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表