public class MusicService extends Service { private MediaPlayer player; private Timer timer; public MusicService() {} @Override public IBinder onBind(Intent intent){ return new MusicControl(); } @Override public void onCreate(){ super.onCreate(); player=new MediaPlayer();//创建音乐播放器对象 } public void addTimer(){ //添加计时器用于设置音乐播放器中的播放进度条 if(timer==null){ timer=new Timer();//创建计时器对象 TimerTask task=new TimerTask() { @Override public void run() { if (player==null) return; int duration=player.getDuration();//获取歌曲总时长 int currentPosition=player.getCurrentPosition();//获取播放进度 Message msg=Music_Activity.handler.obtainMessage();//创建消息对象 //将音乐的总时长和播放进度封装至消息对象中 //Bundl 相当于一个包 用来存放duration和 currentPosition并封装起来发送到MusicActivity中 Bundle bundle=new Bundle(); bundle.putInt("duration",duration); bundle.putInt("currentPosition",currentPosition); msg.setData(bundle); //将消息发送到主线程的消息队列 Music_Activity.handler.sendMessage(msg); } }; //开始计时任务后的5毫秒,第一次执行task任务,以后每500毫秒执行一次 timer.schedule(task,5,500); } }代码解释
时间: 2024-03-04 20:51:04 浏览: 60
这段代码是一个Android应用中的音乐播放服务,用于播放音乐并向其他组件(如活动)提供音乐播放相关的功能。具体来说,它包含一个MediaPlayer对象用于实现音乐播放功能。它还包含一个计时器,用于定期读取MediaPlayer对象的播放进度并将其发送给其他组件。在音乐播放服务被绑定时,它会返回一个MusicControl对象,用于控制音乐播放。在音乐播放服务被创建时,它会创建一个MediaPlayer对象。在addTimer()函数中,它会创建一个计时器对象,并将一个TimerTask对象添加到计时器中。该TimerTask对象的run()方法会读取MediaPlayer对象的播放进度,并将其封装到一个消息对象中发送给其他组件。注意,该代码中的Music_Activity.handler应该是在其他地方定义并初始化过的。
相关问题
public class MusicUtil extends Service { private MediaPlayer mediaPlayer; @Nullable @Override public IBinder onBind(Intent intent) { return null; } //Service被创建时的回调方法 @Override public void onCreate() { super.onCreate(); } //Service被启动时回调方法 @Override public int onStartCommand(Intent intent, int flags, int startId) { Bundle b = intent.getExtras(); int i=b.getInt("key"); mediaPlayer = MediaPlayer.create(MusicUtil.this,i); mediaPlayer.setLooping(false); mediaPlayer.start(); return super.onStartCommand(intent, flags, startId); } /** * Service被停止后调用 */ @Override public void onDestroy() { mediaPlayer.stop();//停止播放 } }这个是什么意思
这是一个用于播放音乐的 Android Service 类。该类继承自 Service 类,实现了 onStartCommand() 和 onDestroy() 方法。在 onStartCommand() 方法中,通过传入的 intent 对象获取音乐资源的 id,然后使用 MediaPlayer 类创建并播放音乐。在 onDestroy() 方法中,停止音乐播放。该 Service 类主要用于在后台播放音乐,而不需要前台运行的情况下,提供持续的音乐播放服务。
package com.music.zds; import android.app.Service; import android.content.Intent; import android.media.MediaPlayer; import android.os.Binder; import android.os.Bundle; import android.os.IBinder; import android.os.Message; import android.util.Log; import java.util.Timer; import java.util.TimerTask; public class MusicService extends Service { public static final String TAG="MusicService"; public MediaPlayer player; private Timer timer; public MusicService() { Log.d(TAG,"MusicService"); } @Override public void onCreate() { super.onCreate(); player=new MediaPlayer(); } @Override public IBinder onBind(Intent intent) { Log.d(TAG,"MusicService()"); return new MusicControler(); } public void addTimer(){ if(timer ==null){ TimerTask task = new TimerTask() { @Override public void run() { if(player == null) return;; int duration = player.getDuration(); int currentPro = player.getCurrentPosition(); Log.w(TAG,"duration:"+duration+",progress:"+currentPro); Message msg = MainActivity.handler.obtainMessage(); Bundle bundle = new Bundle(); bundle.putInt("duration",duration); bundle.putInt("progress",currentPro); msg.setData(bundle); MainActivity.handler.sendMessage(msg); } }; timer.schedule(task,5,500); } } class MusicControler extends Binder{ public void play(){ Log.d(TAG,"play"); try{ player.reset(); player=MediaPlayer.create(getApplicationContext(),R.raw.nianlun,R.raw.jimoyanhuo); player.start(); addTimer(); } catch (Exception e){ e.printStackTrace(); } } public void pause(){ Log.d(TAG,"pause"); player.pause(); } public void continueplay(){ Log.d(TAG,"continueplay"); player.start(); } public void seekTo(int progress){ Log.d(TAG,"seekTo"+progress); player.seekTo(progress); } } @Override public void onDestroy(){ super.onDestroy(); if (player == null) return;; if(player.isPlaying())player.stop(); player.release(); player=null; } }
这是一个 Android 应用程序中的 Service 类,用于播放音乐。它实现了 MediaPlayer 播放器,并提供了一个 Binder 类 MusicControler,用于控制音乐的播放、暂停、继续播放和进度调整等操作。在 onCreate() 方法中初始化了 MediaPlayer 对象,在 onBind() 方法中返回了 MusicControler 实例。在 addTimer() 方法中设置了定时任务,用于定时获取音乐的播放进度,并将进度信息通过 Message 和 Bundle 发送给 MainActivity。在 MusicControler 中的各个方法中调用了 MediaPlayer 对象的相应方法,用于控制音乐的播放进度。在 onDestroy() 方法中释放了 MediaPlayer 对象的资源。
阅读全文