service音乐播放

package com.hanqi.text_service;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.media.MediaPlayer;
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 servicemusic extends AppCompatActivity {
    ProgressBar pb;
    TextView tv1;
    MediaPlayer mediaPlayer;
    Intent intent;
    playSC playSC;
    Handler handler;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.service);
        tv1=(TextView)findViewById(R.id.tv);
        pb=(ProgressBar)findViewById(R.id.pb);
        intent=new Intent(this,musicservice.class);
        playSC=new playSC();
        //绑定
        bindService(intent,playSC, Context.BIND_AUTO_CREATE);
        handler=new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                if (msg.what==0){
                    tv1.setText(msg.obj.toString());
                }
            }
        };
    }
    public void b1(View view){
        //向service发送播放指令
        intent.putExtra("action","play");
        startService(intent);
       // tv1.setText("播放状态:开始播放");
    }
    public void b2(View view){
        //向service发送暂停指令
        intent.putExtra("action","pause");
        startService(intent);
       // tv1.setText("播放状态:暂停播放");
    }
    public void b3(View view){
        //向service发送停止指令
        intent.putExtra("action","stop");
        startService(intent);
       // tv1.setText("播放状态:停止播放");
    }
    public void b4(View view){
        //向service发送关闭指令
        b3(view);
        //解除绑定
        if (playSC!=null){
           unbindService(playSC);
            playSC=null;
        }
        stopService(intent);
        finish();
    }
    class playSC implements ServiceConnection{
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            final musicservice.PlayBinder playbind=( musicservice.PlayBinder)service;

            //启动线程
            new  Thread(){
                @Override
                public void run() {
                    while (true){
                        int max=playbind.getMusicDuration();
                        pb.setMax(max);
                        int c=playbind.getMusicCurrentPosition();
                        pb.setProgress(c);
                        Message message=new Message();
                        message.what=0;
                        message.obj=playbind.getPlayState();

                        try {
                            Thread.sleep(500);
                        }catch (Exception e){
                            e.printStackTrace();
                        }
                    }
                }
            }.start();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    }
}

service代码

package com.hanqi.text_service;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.util.Log;

/**
 * Created by Administrator on 2016/6/21.
 */
public class musicservice extends Service {
    MediaPlayer mediaPlayer;
    String strplay="等待播放";
    public musicservice() {
        Log.e("TAG", "MyService被构造");
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {

        return new PlayBinder();
    }

    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 int onStartCommand(Intent intent, int flags, int startId) {
        String ac=intent.getStringExtra("action");
        switch (ac) {
            case "play":
                if (mediaPlayer == null) {
                    mediaPlayer = MediaPlayer.create(musicservice.this, R.raw.blue);
                    strplay="开始播放";
                mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mp) {
                        mediaPlayer.reset();
                        mediaPlayer.release();
                        mediaPlayer = null;
                        strplay="播放完成";
                    }
                });
        }
                mediaPlayer.start();
                break;
            case "pause":
                if (mediaPlayer!=null&&mediaPlayer.isPlaying()){
                    mediaPlayer.pause();
                    strplay="暂停播放";}
                break;
            case "stop":
                if(mediaPlayer!=null){
                    mediaPlayer.stop();
                    mediaPlayer.reset();
                    mediaPlayer.release();
                    mediaPlayer=null;
                    strplay="停止播放";}
                break;
        }

        return super.onStartCommand(intent, flags, startId);
    }
}

形式2

package com.hanqi.text_service;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.media.MediaPlayer;
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;

public class music2 extends AppCompatActivity {

    ProgressBar pb;
    TextView tv1;
    MediaPlayer mediaPlayer;
    Intent intent;
    //服务连接类的实例
    playserviceconnection pc;
    //代理对象
    music2service.playbind pd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.music2);
        tv1=(TextView)findViewById(R.id.tv);
        pb=(ProgressBar)findViewById(R.id.pb);
        intent=new Intent(this,music2service.class);

        //绑定
        pc=new playserviceconnection();
        bindService(intent,pc, Context.BIND_AUTO_CREATE);
    }

    //服务连接类
    class playserviceconnection implements ServiceConnection{
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //得到代理对象
            pd=(music2service.playbind)service;
            Log.e("TAG","获取代理对象");
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    }

    public void b1(View view){
        //向service发送播放指令
        pd.play();
        tv1.setText("播放状态:开始播放");
    }
    public void b2(View view){
       pd.pause();
        tv1.setText("播放状态:暂停播放");
    }
    public void b3(View view){
        pd.stop();
        tv1.setText("播放状态:停止播放");
    }
    public void b4(View view){
       pd.stop();
        //解除绑定
        unbindService(pc);
        finish();

    }
}

service

package com.hanqi.text_service;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;

/**
 * Created by Administrator on 2016/6/21.
 */
public class music2service extends Service {
    MediaPlayer mediaPlayer;
    public class playbind extends Binder{
        public void play(){

            if (mediaPlayer==null){
                mediaPlayer= MediaPlayer.create(music2service.this, R.raw.blue);
            }
            mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {

                }
            });
            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;}
        }
    }
    playbind pb;
    public  playbind onBind(Intent intent) {
        return pb==null? new  playbind(): pb;
    }

}
时间: 2024-12-20 21:47:56

service音乐播放的相关文章

Android基于发展Service音乐播放器

这是一个基于Service组件的音乐播放器,程序的音乐将会由后台的Service组件负责播放,当后台的播放状态改变时,程序将会通过发送广播通知前台Activity更新界面:当用户单击前台Activity的界面button或拖动进度条时,系统通过发送广播通知后台Service来改变播放状态和播放指定音乐. 程序执行效果图:         watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmVuZ3l1emhlbmdmYW4=/font/5a6L5L2T/

andorid Activity和Service音乐播放器

AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hanqi.testservice"> <application android:allowBackup="

Android开发6:Service的使用(简单音乐播放器的实现)

前言 啦啦啦~各位好久不见啦~博主最近比较忙,而且最近一次实验也是刚刚结束~ 好了不废话了,直接进入我们这次的内容~ 在这篇博文里我们将学习Service(服务)的相关知识,学会使用 Service 进行后台工作, 学会使用 Service 与 Activity 进行通信,并在此知识基础上学会使用 MediaPlayer和简单的多线程编程.使用 Handle 更新 UI,并设计成功一个简单的音乐播放器. 是不是很高大上呢~一起来学习~ 基础知识 Service作为Android四大组件之一,在每

android 利用 service 实现音乐播放

今天的播放器利用了service,播放音乐在service端,进度条在activity端,因此主要的工作就是activity和service的交互,本文将利用IBinder进行交互,主要是activity可以调用service的函数,可以参考我的这篇博客. 本文关键点:利用利用IBinder实现activity 控制service 实现功能: 1 控制播放进度: activity调用service的函数,对MediaPlayer进行控制.包括启动时的播放和滑动seekbar时,对MediaPla

Android(java)学习笔记234: 服务(service)之音乐播放器

1.我们播放音乐,希望在后台长期运行,不希望因为内存不足等等原因,从而导致被gc回收,音乐播放终止,所以我们这里使用服务Service创建一个音乐播放器. 2.创建一个音乐播放器项目(使用服务) (1)首先新建一个Android项目,命名为"Mp3音乐播放器",如下: (2)创建服务MusicService,如下: 1 package com.himi.Mp3player; 2 3 import android.app.Service; 4 import android.content

Android Service AIDL 远程调用服务 简单音乐播放实例的实现

Android Service是分为两种: 本地服务(Local Service): 同一个apk内被调用 远程服务(Remote Service):被另一个apk调用 远程服务需要借助AIDL来完成. AIDL 是什么 AIDL (Android Interface Definition Language) 是一种IDL 语言,用于生成可以在Android设备上两个进程之间进行进程间通信(interprocess communication, IPC)的代码.如果在一个进程中(例如Activi

基于Service的音乐播放器

这是一个基于Service组件的音乐播放器,程序的音乐将会由后台的Service组件负责播放,当后台的播放状态改变时,程序将会通过发送广播通知前台Activity更新界面:当用户单击前台Activity的界面按钮或拖动进度条时,系统通过发送广播通知后台Service来改变播放状态和播放指定音乐. 程序运行效果图:         程序代码: 程序界面类(MusicBox.java): package com.jph.musicbox; import com.jph.util.ConstUtil;

相对完美的后台Service实现播放音乐功能

对于用Context.startService()启动的service生命周期为onCreate()-onStartCommand()-onDestroy();如果多次用context.startService启动service只会多次执行onStartCommand()方法.根据音乐播放器的特性使用Context.startService()调用在合适不过了. public class MyMusicPlayer extends Service implements MediaPlayer.O

使用Service组件实现简单的音乐播放器功能 --Android基础

1.本例利用Service实现简单的音乐播放功能,下面是效果图.(点击开始播放开启服务,音乐播放,点击“停止播放”关闭服务,音乐停止播放.) 2.核心代码: MusicService.java: package thonlon.example.cn.servicedemo; import android.app.Service;import android.content.Intent;import android.media.MediaPlayer;import android.net.Uri