首页 >> 知识 >> androids Studio初学者实例:仿网易音乐播放器

androids Studio初学者实例:仿网易音乐播放器

本期带来的是以Service为主要的知识点的网易音乐播放器

看一下效果图

 首先项目准备:

在res下新建raw文件夹,并在文件夹中添加喜爱的mp3音乐

 OK,第一步,先写一个背景文件,在res/drawable文件夹中新建xml文件:

btn_bg_selector.xml

 编写主界面代码activity_main.xml

编写MusicService

import androids.app.Service;import androids.content.Intent;import androids.media.MediaPlayer;import androids.os.Binder;import androids.os.Bundle;import androids.os.IBinder;import androids.os.Message;import androidsx.annotation.Nullable;import java.util.Timer;import java.util.TimerTask;public class MusicService extends Service { private MediaPlayer player; private Timer timer; public MusicService(){ } @Nullable @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=MainActivity.handler.obtainMessage(); Bundle bundle=new Bundle(); bundle.putInt("duration",duration); bundle.putInt("currentPosition",currentPosition); msg.setData(bundle); MainActivity.handler.sendMessage(msg); } }; timer.schedule(task,5,500); } } class MusicControl extends Binder{ public void play(){ try{ player.reset(); player=MediaPlayer.create(getApplicationContext(),R.raw.music); addTimer(); }catch (Exception e){ e.printStackTrace(); } } public void pausePlay(){ player.pause(); } public void continuePlay(){ player.start(); } public void seekTo(int progress){ player.seekTo(progress); } } @Override public void onDestroy() { super.onDestroy(); if (player==null)return; if (player.isPlaying())player.stop(); player.release(); player=null; }}

注意:检查androidsManifest.xml文件中是否注册了Service

 

编写主界面逻辑代码MainActivity

import androidsx.annotation.NonNull;import androidsx.appcompat.app.AppCompatActivity;import androids.animation.ObjectAnimator;import androids.animation.ValueAnimator;import androids.content.ComponentName;import androids.content.Intent;import androids.content.ServiceConnection;import androids.os.Bundle;import androids.os.Handler;import androids.os.IBinder;import androids.os.Message;import androids.view.View;import androids.view.animation.LinearInterpolator;import androids.widget.ImageView;import androids.widget.SeekBar;import androids.widget.TextView;public class MainActivity extends AppCompatActivity implements View.OnClickListener { private static SeekBar sb; private static TextView tv_progress,tv_total; private ObjectAnimator animator; private MusicService.MusicControl musicControl; MyServiceConn conn; Intent intent; private boolean isUnbind=false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init(){ tv_progress=findViewById(R.id.tv_progress); tv_total=findViewById(R.id.tv_total); sb=findViewById(R.id.sb); findViewById(R.id.btn_play).setOnClickListener(this); findViewById(R.id.btn_pause).setOnClickListener(this); findViewById(R.id.btn_continue_play).setOnClickListener(this); findViewById(R.id.btn_exit).setOnClickListener(this); intent=new Intent(this,MusicService.class); conn=new MyServiceConn(); bindService(intent,conn,BIND_AUTO_CREATE); sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (progress==seekBar.getMax()){ animator.pause(); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { int progress=seekBar.getProgress(); musicControl.seekTo(progress); } }); ImageView iv_music = (ImageView) findViewById(R.id.iv_music); animator = ObjectAnimator.ofFloat(iv_music, "rotation", 0f, 360.0f); animator.setDuration(10000); //动画旋转一周的时间为10秒 animator.setInterpolator(new LinearInterpolator()); animator.setRepeatCount(-1); //-1表示设置动画无限循环 } public static Handler handler=new Handler(){ @Override public void handleMessage(@NonNull Message msg) { Bundle bundle=msg.getData(); int duration=bundle.getInt("duration"); int currentPosition=bundle.getInt("currentPosition"); sb.setMax(duration); sb.setProgress(currentPosition); int minute=duration/1000/60; int second=duration/1000%60; String strMinute=null; String strSecond=null; if (minute
网站地图