博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Service 音乐播放器
阅读量:6905 次
发布时间:2019-06-27

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

package com.example.lenovo.musicplay;import android.content.Intent;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.ProgressBar;import android.widget.TextView;public class PlayActivity1 extends AppCompatActivity {    TextView tv_1;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_play1);        tv_1=(TextView)findViewById(R.id.tv_1);        Intent intent=new Intent(this,MusicService1.class);    }    Intent intent;    public void bt_1(View v)    {        //向service发送播放指令        intent.putExtra("action", "play");        startService(intent);        tv_1.setText("播放状态:正在播放");    }    public void bt_2(View v)    {        //向service发送停止指令        intent.putExtra("action","stop");        startService(intent);        tv_1.setText("播放状态:停止播放");    }    public void bt_3(View v)    {        //向service发送暂停指令        intent.putExtra("action","pause");        startService(intent);        tv_1.setText("播放状态:暂停播放");    }    public void bt_4(View v)    {        //向service发送退出指令        bt_3(v);        stopService(intent);        finish();    }}
playactivity
package com.example.lenovo.musicplay;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.os.IBinder;public class MusicService1 extends Service {    public MusicService1() {    }    //播放器对象    MediaPlayer mediaPlayer;    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        //处理指令        String ac=intent.getStringExtra("action");        switch (ac)        {            case "play":                if (mediaPlayer == null) {                    //用静态方法构造                    mediaPlayer = MediaPlayer.create(this, R.raw.fuqin);                    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {                        @Override                        public void onCompletion(MediaPlayer mp) {                            mediaPlayer.reset();                            mediaPlayer.release();                            mediaPlayer = null;                        }                    });                }                mediaPlayer.start();                break;            case "stop":                if (mediaPlayer!=null) {                    mediaPlayer.stop();//停止                    mediaPlayer.reset();//重置                    mediaPlayer.release();//释放                    mediaPlayer = null;//置空                }                break;            case "pause":                if (mediaPlayer!=null&&mediaPlayer.isPlaying())                {                    mediaPlayer.pause();//暂停                }                break;        }        return super.onStartCommand(intent, flags, startId);    }    @Override    public IBinder onBind(Intent intent) {        // TODO: Return the communication channel to the service.        throw new UnsupportedOperationException("Not yet implemented");    }}
musicservice.java

 

 

 

package com.example.lenovo.musicplay;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.IBinder;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.ProgressBar;import android.widget.TextView;import java.util.Vector;public class Play2Activity extends AppCompatActivity {    TextView tv_1;    ProgressBar pb_1;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_play2);        pb_1 = (ProgressBar) findViewById(R.id.pb_1);        tv_1 = (TextView) findViewById(R.id.tv_1);        Intent intent=new Intent(this,MusicService2.class);        playServiceConnection=new PlayServiceConnection();        //绑定        bindService(intent,playServiceConnection, Context.BIND_AUTO_CREATE);    }    //代理对象    MusicService2.PlayBinder playBinder;    PlayServiceConnection playServiceConnection;    //服务连接类    class PlayServiceConnection implements ServiceConnection    {        @Override        public void onServiceConnected(ComponentName name, IBinder service) {            //得到代理对象            playBinder=(MusicService2.PlayBinder) service;            Log.e("TAG","得到代理对象");        }        @Override        public void onServiceDisconnected(ComponentName name) {        }    }    public void bt_1(View v)    {        if (playBinder!=null) {            playBinder.play();        }    }    public void bt_2(View v)    {        if (playBinder!=null) {            playBinder.pause();        }    }    public void bt_3(View v)    {        if (playBinder!=null) {            playBinder.stop();        }    }    public void bt_4(View v)    {        if (playServiceConnection!=null) {            bt_3(v);            unbindService(playServiceConnection);//解绑            finish();        }    }}
playactivity2
package com.example.lenovo.musicplay;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.os.Binder;import android.os.IBinder;public class MusicService2 extends Service {    //播放器对象    MediaPlayer mediaPlayer;    public class PlayBinder extends Binder    {        public void play()        {            if (mediaPlayer == null) {                //用静态方法构造                mediaPlayer = MediaPlayer.create(MusicService2.this, R.raw.fuqin);                mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {                    @Override                    public void onCompletion(MediaPlayer mp) {                        mediaPlayer.reset();                        mediaPlayer.release();                        mediaPlayer = null;                    }                });            }            mediaPlayer.start();        }        public void pause()        {            if (mediaPlayer!=null&&mediaPlayer.isPlaying())            {                mediaPlayer.pause();//暂停            }        }        public void stop()        {            if (mediaPlayer!=null) {                mediaPlayer.stop();//停止                mediaPlayer.reset();//重置                mediaPlayer.release();//释放                mediaPlayer = null;//置空            }        }    }    @Override    public IBinder onBind(Intent intent) {        return new PlayBinder();       }}
musicservice2

 

 

 

加进度条(Service   跨线程+消息机制)

activity
package com.example.lenovo.musicplay;import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.os.Binder;import android.os.IBinder;public class MusicService1 extends Service {    public MusicService1() {    }    //播放器对象    MediaPlayer mediaPlayer;    String strPlay="等待播放";    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        //处理指令        String ac=intent.getStringExtra("action");        switch (ac)        {            case "play":                if (mediaPlayer == null) {                    //用静态方法构造                    mediaPlayer = MediaPlayer.create(this, R.raw.fuqin);                    mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {                        @Override                        public void onCompletion(MediaPlayer mp) {                            mediaPlayer.reset();                            mediaPlayer.release();                            mediaPlayer = null;                            strPlay="完成播放";                        }                    });                }                mediaPlayer.start();                strPlay="正在播放";                break;            case "stop":                if (mediaPlayer!=null) {                    mediaPlayer.stop();//停止                    mediaPlayer.reset();//重置                    mediaPlayer.release();//释放                    mediaPlayer = null;//置空                    strPlay="停止播放";                }                break;            case "pause":                if (mediaPlayer!=null&&mediaPlayer.isPlaying())                {                    mediaPlayer.pause();//暂停                    strPlay="暂停播放";                }                break;        }        return super.onStartCommand(intent, flags, startId);    }    //代理对象    public class PlayBinder extends Binder    {        //得到进度条总长度        public int getMusicDuration()        {            int rtn=100;            if (mediaPlayer!=null)            {                rtn=mediaPlayer.getDuration();            }            return rtn;        }        //得到当前播放进度        public int getMusicCurrentPosition()        {            int rtn=0;            if (mediaPlayer!=null)            {                rtn=mediaPlayer.getCurrentPosition();            }            return rtn;        }        //得到当前状态        public String getPlayState()        {            return strPlay;        }    }    @Override    public IBinder onBind(Intent intent) {        return new PlayBinder();    }}
musicservice
package com.example.lenovo.musicplay;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.ProgressBar;import android.widget.TextView;public class PlayActivity1 extends AppCompatActivity {    TextView tv_1;    ProgressBar pb_1;    Intent intent;    PlaySC playSC;    Handler handler;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_play1);        tv_1=(TextView)findViewById(R.id.tv_1);        pb_1=(ProgressBar)findViewById(R.id.pb_1);        intent=new Intent(this,MusicService1.class);        playSC=new PlaySC();        //绑定        bindService(intent,playSC, Context.BIND_AUTO_CREATE);        handler = new Handler()        {            @Override            public void handleMessage(Message msg){                if (msg.what==1)                {                    String str=msg.obj.toString();                    tv_1.setText("播放状态:"+str);                }            }        };    }    public void bt_1(View v)    {        //向service发送播放指令        intent.putExtra("action", "play");        startService(intent);        //tv_1.setText("播放状态:正在播放");    }    public void bt_2(View v)    {        //向service发送停止指令        intent.putExtra("action","stop");        startService(intent);        //tv_1.setText("播放状态:停止播放");    }    public void bt_3(View v)    {        //向service发送暂停指令        intent.putExtra("action","pause");        startService(intent);        //tv_1.setText("播放状态:暂停播放");    }    public void bt_4(View v)    {        //向service发送退出指令        bt_3(v);        stopService(intent);        if (playSC!=null)        {            unbindService(playSC);//解绑            playSC=null;        }        finish();    }    class PlaySC implements ServiceConnection    {        @Override        public void onServiceConnected(ComponentName name, IBinder service) {            final MusicService1.PlayBinder playBinder=(MusicService1.PlayBinder)service;            //启动子线程            new Thread()            {                @Override                public void run() {                    while (true)                    {                        int max=playBinder.getMusicDuration();                        pb_1.setMax(max);                        int c=playBinder.getMusicCurrentPosition();                        pb_1.setProgress(c);                        //设置播放状态                        Message msg=new Message();                        msg.what=1;                        msg.obj=playBinder.getPlayState();                        handler.sendMessage(msg);                        try {                            Thread.sleep(500);                        }                        catch (Exception e)                        {                            e.printStackTrace();                        }                    }                }            }.start();        }        @Override        public void onServiceDisconnected(ComponentName name) {        }    }}
playactivity

 

转载于:https://www.cnblogs.com/1ming/p/5623246.html

你可能感兴趣的文章
七、Builder 建造器模式
查看>>
Redis 总结
查看>>
WCF 回调及重入
查看>>
Java集合与泛型中的几个陷阱,你掉进了几个?
查看>>
exynos4412—链接脚本复习
查看>>
(转)内联函数
查看>>
多层级的数据绑定效果
查看>>
Date日期操作
查看>>
js获取地址栏参数
查看>>
PHP 类的反射
查看>>
HTTP协议学习笔记
查看>>
better-scroll:在react中用better-scroll封装一个滚动的组件
查看>>
hdu 2051
查看>>
window下配置rsh环境
查看>>
第七章数组实验报告
查看>>
HTTP服务介绍
查看>>
如何创建数据库架构
查看>>
windows server FileServer 共享文件的 ABE 设定脚本
查看>>
ssi配置
查看>>
算法专题 棋盘覆盖问题 普及组【2007】四2 C++版
查看>>