绑定服务抽取接口

本文介绍了一个基于Android的简易音乐播放器服务实现方法。通过定义一个音乐服务接口IMusicService来暴露播放、暂停、停止及继续播放等功能,并利用内部类实现该接口。Activity通过绑定服务并转换为接口类型,进而调用接口中的方法来控制音乐播放。

示例代码 简易的播放器:

A. 写一个接口,在接口中写一个要暴露出去的方法

B. 让服务里的内部类实现这个接口

C. activity的连接成功后,强转为接口类型

D. 调用接口中的方法,实际上调用的时接口的实现类服务里的内部类里的方法

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.IBinder;
public class MusicService extends Service {
   private MediaPlayer   mediaPlayer;
   @Override
   public IBinder onBind(Intent intent) {
      return new Music();
   }
   private class Music extends Binder implements IMusicService{
      @Override
      public void play() {
         playMusic();
      }
      @Override
      public void pause() {
         pauseMusic();
      }
      @Override
      public void stop() {
         stopMusic();
      }
      @Override
      public void resume() {
         resumeMusic();
      }
   }

   public void playMusic(){
      //避免音乐二重唱
      if (mediaPlayer != null) {
         mediaPlayer.stop();
         mediaPlayer.release();//释放音乐
         mediaPlayer = null;
      }
      //创建音乐对象
      mediaPlayer = MediaPlayer.create(this, R.raw.ib);
      //开启播放
      mediaPlayer.start();
   }
   public void stopMusic() {
      if (mediaPlayer != null && mediaPlayer.isPlaying()) {
         mediaPlayer.stop();
      }
   }
   public void resumeMusic() {
      if (mediaPlayer != null && !mediaPlayer.isPlaying()) {
         mediaPlayer.start();
      }
   }
   public void pauseMusic(){
      if (mediaPlayer != null && mediaPlayer.isPlaying()) {
         mediaPlayer.pause();
     }
   }

/**
 * 音乐服务的接口
 * 暴露播放 、暂停、停止、继续播放的功能
 */
public interface IMusicService {
   /**
    * 播放音乐
    */
   public void play();
   public void pause();
   public void stop();
   public void resume();
}

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;



public class MainActivity extends Activity {
   private Intent     intent;
   private MusicCon   mConn;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      // start开启服务,让服务长期运行在后台
      intent = new Intent(this, MusicService.class);
      startService(intent);
      // bind绑定服务,调用服务里的方法
      mConn = new MusicCon();
      bindService(intent, mConn, BIND_AUTO_CREATE);
   }
   /**
    * 播放音乐
    */
   public void start(View v) {
      mService.play();
   }
   /**
    * 暂停音乐
    */
   public void pause(View v) {
      mService.pause();
   }

   /**
    * 停止播放
    */
   public void stop(View v) {
     mService.stop();
   }

   /**
    * 继续播放音乐
    */
   public void resume(View v) {
      mService.resume();
   }
   private IMusicService mService;
   /**
    * 音乐的连接对象
    */
   private class MusicCon implements ServiceConnection {
     @Override
      public void onServiceDisconnected(ComponentName name) {
      }
      @Override
      public void onServiceConnected(ComponentName name, IBinder service) {
         mService = (IMusicService) service;
      }
   }
  /**
    * 在activity销毁前解绑服务
    */
   @Override
   protected void onDestroy() {
     super.onDestroy();
      unbindService(mConn);
   }
}

清单文件注册服务:
      <service android:name="com.example.dugu_music.MusicService" ></service>

 

转载于:https://www.cnblogs.com/loaderman/p/6416286.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值