zoukankan      html  css  js  c++  java
  • 绑定服务抽取接口

    示例代码 简易的播放器:

    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>
    
  • 相关阅读:
    微信小程序——Now you can provide attr "wx:key" for a "wx:for" to improve performance.
    mac 桌面美化
    获取json对象长度
    js 记忆函数
    js提取整数部分,移除首末空格
    js糟粕
    zepto 获取checked selected元素
    BFC块级排版上下文
    zepto 获取select选中的值
    手机不支持onchange事件
  • 原文地址:https://www.cnblogs.com/loaderman/p/6416286.html
Copyright © 2011-2022 走看看