绑定服务抽取接口

示例代码 简易的播放器:

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>
时间: 2024-10-14 20:32:16

绑定服务抽取接口的相关文章

androi之Service+Broadcast+Timer+ui【通过绑定服务、自定义回调接口判断

最近项目要定时从服务器获取某些信息,通过研究来总结一下下[我以定时判断网络状态为例来阐述] 原理: 我们定义一个Service,在该Service中设置一个定时器Timer,通过TimerTask的策略来检查当前应用的网络连接状态,关键是在该Service需要自定义一个回调接口用于向我们的Activity来回调发送网络状态,然后通过Bind来绑定当前的Service,在绑定成功之后得到回调信息 代码: Service类 package com.example.androidtimerdemo;

绑定服务学习

绑定服务主要是其他组件绑定服务(比如活动),然后发送请求,接收返回.这个服务主要是作为其他组件的佣人,不会再后台无限 地运行.个人认为关键要学习的是如何绑定以及服务和组件之间的通信. 如何绑定到服务 一个绑定的服务是Service类的实现,允许其他组件绑定和他通信.要为服务提供绑定,必须实现onBind回调方法.这个方法返回IBinder, 定义了客户端可以和服务通信的程序接口. 客户端可以调用bindService绑定到service上,要这么做必须提供ServiceConnection的实现

绑定服务调用本地服务中的方法

如果想调用服务中的方法, 通过startService()是做不到的, 这时需要用bindService来解决. 下面的demo是在Activity中调用Service中的自定义方法---methodInService 这个demo可以解决在项目开发中调用service里的数据. 这里在service中使用到了代理模式.这是为了,给service组件和activity组件中间添加一个中间人. 通过代理来传递数据.也就是binder对象.这个代理就是接口IService Service中的代码如下

绑定服务调用远程服务中的方法

在Andorid平台中,各个组件运行在自己的进程中,他们之间是不能相互访问的,但是在程序之间是不可避免的要传递一些对象,在进程之间相互通信.为了实现进程之间的相互通信,Andorid采用了一种轻量级的实现方式RPC(Remote Procedure Call 远程进程调用)来完成进程之间的通信,并且Android通过接口定义语言(Andorid Interface Definition Language ,AIDL)来生成两个进程之间相互访问的代码,例如,你在Activity里的代码需要访问Se

adnroid四大组件之Service(5) 绑定服务,数据通信-IBinder

绑定服务: 第一步:创建一个服务类,实现onBind() 方法, 返回一个IBinder对象, 这个对象定义了与服务通信的接口,客户端接收到这个IBinder,与服务进行 通信.  IBinder的实现类通过一个 方法用来获取服务,和onTransact方法 与客户端进行通信. 第二步:在清单文件注册服务<service>  <service android:name="com.example.bindservicedemo.BindService"></

Xamarin.Android广播接收器与绑定服务

一.前言 学习了前面的活动与服务后,你会发现服务对于活动而言似乎就是透明的,相反活动对于服务也是透明的,所以我们还需要一中机制能够将服务和活动之间架起一座桥梁,通过本节的学习,你将会学到广播与绑定服务,这两种方式恰恰是解决上面问题的关键. 二.简单的广播接收器 实现一个最简单的广播接收器需要继承BroadcastReceiver类,并且还要实现OnReceive方法,我们可以在项目中新建一个MainReceiver类,然后写入如下代码: 1 public class MainReceiver :

Android应用程序绑定服务(bindService)的过程源代码分析

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6745181 Android应用程序组件Service与Activity一样,既可以在新的进程中启动,也可以在应用程序进程内部 启动:前面我们已经分析了在新的进程中启动Service的过程,本文将要介绍在应用程序内部绑定Service的过程,这是一种在应用程序进程内部启动 Service的方法. 在前面一篇文章Android进程间通信(IPC)机

Android(java)学习笔记228:服务(service)之绑定服务调用服务里面的方法

1.绑定服务调用服务里面的方法,图解: 步骤: (1)在Activity代码里面绑定 bindService(),以bind的方式开启服务 :                     bindService(intent, new MyConn(), BIND_AUTO_CREATE): 参数intent:意图对象,服务对应的意图对象  new  Intent(this,Service.class) 参数ServiceConnection (接口,自定义其接口实现内部类MyConn() ):通讯

Android Mediaplayer本地音乐播放器(绑定服务)

本文章介绍MediaPlayer本地音乐播放器,而当应用程序不再位于前台且没有正在使用它的活动时,为了确保音频继续播放,我们需要建立一个服务Service. Activity与绑定服务Service之间的交互是本文章的重点(这里需要说明一点的是,Activity不能直接访问服务对象中的方法,所以才有了我们一下的介绍,这也是为服务的安全等方面的考虑). 直接上代码: 布局文件:activity_main: <LinearLayout xmlns:android="http://schemas