博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第17天Service案例-使用绑定服务完成音乐播放器
阅读量:3786 次
发布时间:2019-05-22

本文共 3290 字,大约阅读时间需要 10 分钟。

第17天Service案例-使用绑定服务完成音乐播放器

音乐播放器

一.效果

在这里插入图片描述

二.思路

1.创建MusicService,在Service中提供播放音乐、暂停音乐、停止播放、播放上一首、播放下一首、滚动条滚动

2.创建Activity:绑定服务,绑定成功直接调用服务中的方法

三.代码

(1)MusicService的代码:

public class MusicService extends Service {
private MediaPlayer mediaPlayer; private ArrayList
list=new ArrayList<>(); private int current; @Override public void onCreate() {
super.onCreate(); list.add(R.raw.aa); list.add(R.raw.bb); list.add(R.raw.cc); } @Nullable @Override public IBinder onBind(Intent intent) {
return new MusicBinder(); } //TODO 播放音乐 public void play() {
if(mediaPlayer==null){
mediaPlayer=MediaPlayer.create(this,list.get(0)); } mediaPlayer.start();//播放音乐 } //TODO 暂停 public void pause() {
if(mediaPlayer!=null){
mediaPlayer.pause();//暂停音乐 } } //TODO 停止 public void stop() {
if(mediaPlayer!=null){
mediaPlayer.stop();//暂停音乐 mediaPlayer.release();//资源释放 mediaPlayer=null;//设置为null } } //TODO 播放下一收 public void next(){
//停止当前的歌 stop(); //新的歌曲 int num=(Math.abs(++current))%list.size(); mediaPlayer=MediaPlayer.create(this,(list.get(num))); mediaPlayer.start(); } //TODO 播放上 一收 public void pre(){
//停止当前的歌 stop(); //新的歌曲 int num=(Math.abs(--current))%list.size(); mediaPlayer=MediaPlayer.create(this,(list.get(num))); mediaPlayer.start(); } //TODO 返回当前进度 public int getCurrent(){
if(mediaPlayer!=null){
int positon = mediaPlayer.getCurrentPosition();//当前播放的时长 int duration = mediaPlayer.getDuration();//总时长 return positon*100/duration; } return 0; } //TODO 设置进度 public void setPositon(int progress){
//50 if(mediaPlayer!=null) mediaPlayer.seekTo(mediaPlayer.getDuration()*progress/100); } class MusicBinder extends Binder {
public MusicService getService() {
return MusicService.this; } }}

(2)注册服务:

(3)Java代码:MainActivity.java

public class MainActivity extends AppCompatActivity {
Intent intent; MyService myService; private ServiceConnection connection=new ServiceConnection() {
@Override public void onServiceConnected(ComponentName name, IBinder service) {
myService=((MyService.MyBinder)service).getService(); } @Override public void onServiceDisconnected(ComponentName name) {
} }; @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //绑定服务 intent=new Intent(this,MyService.class); bindService(intent,connection, Service.BIND_AUTO_CREATE); } //解除绑定服务 @Override protected void onDestroy() {
super.onDestroy(); unbindService(connection); } //播放音乐按钮 public void play(View view) {
myService.play(); } //暂停按钮 public void pause(View view) {
myService.pause(); } //停止音乐按钮 public void stop(View view) {
myService.stop(); }}

转载地址:http://xwktn.baihongyu.com/

你可能感兴趣的文章
装饰器和门面设计模式介绍
查看>>
创建型模式——克隆模式
查看>>
JVM关闭和Hook钩子
查看>>
线程中断处理
查看>>
消息队列积压问题处理
查看>>
并行流使用注意事项
查看>>
泛型擦除机制及相关问题
查看>>
Jackson日期反序列化时区问题
查看>>
《设计模式》
查看>>
单例设计模式
查看>>
面试题集锦(一)
查看>>
Calendar类方法——编写万年历的两种方式
查看>>
File类的使用——遍历所有文件及子文件以及遍历删除
查看>>
内存流的使用——基本使用
查看>>
RandomAccessFile 类的使用——基本使用
查看>>
Properties实现类——基本使用
查看>>
结构型模式——装饰者设计模式
查看>>
线程的同步——Synchronized和ReentrantLock
查看>>
网络编程基础
查看>>
python实现快速排序
查看>>