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

您所在的位置:网站首页 制作音乐app安卓 Android Studio初学者实例:仿网易音乐播放器

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

2024-07-06 23:20| 来源: 网络整理| 查看: 265

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

看一下效果图

 首先项目准备:

在res下新建raw文件夹,并在文件夹中添加喜爱的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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3