小工具知识网

当前位置: 首页 > 行业知识 > Android Studio初学者实例:仿网易音乐播放器

行业知识

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

2026-10-31 23:56:31 来源:互联网转载

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

看一下效果图

 首先项目准备:

在res下新建rawindex.php/tags-522.html" >文件夹,并在文件夹中添加喜爱的mp3音乐

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

btn_bg_selector.xml

                                                                                                

 编写主界面代码activity_main.xml

                                                                                                                                                                                            

编写MusicService

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 androidx.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;    }}

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

 

        

编写主界面逻辑代码MainActivity

import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import android.animation.ObjectAnimator;import android.animation.ValueAnimator;import android.content.ComponentName;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android.view.View;import android.view.animation.LinearInterpolator;import android.widget.ImageView;import android.widget.SeekBar;import android.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

上一篇:服务器怎么按到机架上?

下一篇:cf服务器怎么弄斯太尔?