源码在最后哦!

一、Service组件介绍

1、Service

Service它可以在后台执行长时间运行操作而没有用户界面的应用组件,不依赖任何用户界面,例如后台播放音乐,后台下载文件等。

虽然服务是在后台运行的,但是Service和Activity都是运行在当前APP所在的main thread(UI主线程)中的,而耗时操作(如网络请求、拷贝数据、大文件)会阻塞主线程,给用户带来不好的体验。如果需要在服务中进行耗时操作,可以选择 IntentService,IntentService是Service的子类,用来处理异步请求。

2、Service启动的两种方式

(1)在Acitivity界面通过显式意图(或隐式意图)的方式来启动服务和关闭服务。

 Intent intentService = new Intent(MainActivity.this, AudioServiceOnBind.class);startService(intentService);

(2)bindService()绑定服务

当应用组件通过调用 bindService() 绑定到服务时,服务即处于“绑定”状态。绑定服务提供了一个客户端-服务器接口,允许组件与服务进行交互、发送请求、获取结果。 仅当与另一个应用组件绑定时,绑定服务才会运行。 多个组件可以同时绑定到该服务,但全部取消绑定后,该服务即会被销毁。

二、实现简单音乐播放器

1、首先创建一个Service

创建Service直接在Android Studio中右键选择Service创建即可。默认我们所创建的Service是继承Service的。同时我们为了实现后台音乐播放的功能,所以我们还要实MediaPlayer.OnCompletionListener的接口。

同时还要在AndroidManifest.xml文件中对已经创建的Service进行注册,这一点Android Studio已经帮我们自动创建好了。

  <serviceandroid:name=".AudioServiceOnBind"android:enabled="true"android:exported="false" />

创建 AudioServiceOnBind服务,在应用时通过绑定的方式进行服务调用。

public class AudioServiceOnBind extends Service implements MediaPlayer.OnCompletionListener{private final IBinder binder = new AudioBinder();public AudioServiceOnBind() {super();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Log.d(AudioServiceOnBind.this.getClass().getName(),"执行onStartCommand()");return 0;}@Overridepublic IBinder onBind(Intent intent) {return binder;}@Overridepublic void onCreate(){super.onCreate();Log.d(AudioServiceOnBind.this.getClass().getName(),"执行onCreate()");}@Overridepublic void onCompletion(MediaPlayer mp) {stopSelf();}@Overridepublic void onDestroy(){super.onDestroy();Log.d(AudioServiceOnBind.this.getClass().getName(),"执行onDestroy()");}//为了和Activity交互,我们需要定义一个Binder对象class AudioBinder extends Binder {//返回Service对象AudioServiceOnBind getService(){return AudioServiceOnBind.this;}}
}

2、实现媒体播放功能

(1)首先准备好需要播放的音乐资源,放在res目录下的raw文件下。

(2)在Service中 重写onCreate()方法实现对媒体资源的加载以及播放。

    //用于播放音乐等媒体资源private MediaPlayer mediaPlayer;@Overridepublic void onCreate(){super.onCreate();Log.d(AudioServiceOnBind.this.getClass().getName(),"执行onCreate()");if (mediaPlayer==null){mediaPlayer=MediaPlayer.create(this,R.raw.gumeng);mediaPlayer.setOnCompletionListener(this);}mediaPlayer.start();}

(3)实现播放暂停功能

public void pause() {if (mediaPlayer != null && mediaPlayer.isPlaying()) {mediaPlayer.pause();}}

(4)实现继续播放功能

 public void play() {if (!mediaPlayer.isPlaying()) {mediaPlayer.start();}}

(5)实现服务销毁时释放资源

 @Overridepublic void onDestroy(){if(mediaPlayer.isPlaying()){mediaPlayer.stop();}mediaPlayer.release();stopForeground(true);Log.d(AudioServiceOnBind.this.getClass().getName(),"执行onDestroy()");}

(6)Service完整代码

public class AudioServiceOnBind extends Service implements MediaPlayer.OnCompletionListener{private final IBinder binder = new AudioBinder();//用于播放音乐等媒体资源private MediaPlayer mediaPlayer;public AudioServiceOnBind() {super();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Log.d(AudioServiceOnBind.this.getClass().getName(),"执行onStartCommand()");return 0;}@Overridepublic IBinder onBind(Intent intent) {return binder;}@Overridepublic void onCreate(){super.onCreate();Log.d(AudioServiceOnBind.this.getClass().getName(),"执行onCreate()");if (mediaPlayer==null){mediaPlayer=MediaPlayer.create(this,R.raw.gumeng);mediaPlayer.setOnCompletionListener(this);}mediaPlayer.start();}@Overridepublic void onCompletion(MediaPlayer mp) {stopSelf();}@Overridepublic void onDestroy(){if(mediaPlayer.isPlaying()){mediaPlayer.stop();}mediaPlayer.release();stopForeground(true);Log.d(AudioServiceOnBind.this.getClass().getName(),"执行onDestroy()");}public void pause() {if (mediaPlayer != null && mediaPlayer.isPlaying()) {mediaPlayer.pause();}}public void play() {if (!mediaPlayer.isPlaying()) {mediaPlayer.start();}}//为了和Activity交互,我们需要定义一个Binder对象class AudioBinder extends Binder {//返回Service对象AudioServiceOnBind getService(){return AudioServiceOnBind.this;}}
}

3、实现对音乐播放服务的调用

(1)创建一个Activity

public class MainActivity extends AppCompatActivity {private AudioServiceOnBind audioServiceOnBind;//使用ServiceConnection来监听Service状态的变化private ServiceConnection conn = new ServiceConnection() {@Overridepublic void onServiceDisconnected(ComponentName name) {audioServiceOnBind = null;}@Overridepublic void onServiceConnected(ComponentName name, IBinder binder) {//这里我们实例化audioService,通过binder来实现audioServiceOnBind = ((AudioServiceOnBind.AudioBinder) binder).getService();}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Objects.requireNonNull(getSupportActionBar()).hide();setContentView(R.layout.activity_main);requestWindowFeature(Window.FEATURE_NO_TITLE); setStatusBarFullTransparent();System.out.println("MainActivity:onCreate()方法执行了,主界面被创建了");}@Overrideprotected void onStart() {super.onStart();System.out.println("MainActivity:onStart()方法执行了,界面可以看到了");}@Overrideprotected void onResume() {super.onResume();System.out.println("MainActivity:onResume()方法执行了,我获得焦点了");}@Overrideprotected void onRestart() {super.onRestart();System.out.println("MainActivity:onRestart()方法执行了,用户重启界面了");}@Overrideprotected void onPause() {super.onPause();System.out.println("MainActivity:onPause()方法执行了,我失去焦点了");}@Overrideprotected void onStop() {super.onStop();System.out.println("MainActivity:onStop()方法执行了,界面看不见了");}@Overrideprotected void onDestroy() {super.onDestroy();System.out.println("MainActivity:onDestroy()方法执行了,界面被销毁了");}//点击播放音乐按钮进行服务绑定public void click_music_open(View view) {Intent intentService = new Intent(MainActivity.this, AudioServiceOnBind.class);bindService(intentService, conn, Context.BIND_AUTO_CREATE);}//暂停播放音乐public void click_music_pause(View view) {audioServiceOnBind.pause();}//继续播放public void music_button_play(View view) {audioServiceOnBind.play();}//停止播放public void click_music_stop(View view) {unbindService(conn);}
}

(2)定义界面布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/fullwhite"android:orientation="vertical"tools:context=".MainActivity"tools:visibility="visible"><TextViewandroid:id="@+id/text_viwe"android:layout_width="match_parent"android:layout_height="50dp"android:layout_marginTop="40dp"android:gravity="center_horizontal"android:text="@string/activity"android:textSize="20sp"tools:ignore="MissingConstraints" /><Buttonandroid:id="@+id/music_button_open"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="50dp"android:layout_marginTop="30dp"android:layout_marginRight="50dp"android:onClick="click_music_open"android:text="播放音乐"tools:ignore="MissingConstraints" /><Buttonandroid:id="@+id/music_button_pause"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="50dp"android:layout_marginTop="30dp"android:layout_marginRight="50dp"android:onClick="click_music_pause"android:text="暂停播放"tools:ignore="MissingConstraints" /><Buttonandroid:id="@+id/music_button_play"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="50dp"android:layout_marginTop="30dp"android:layout_marginRight="50dp"android:onClick="music_button_play"android:text="继续播放"tools:ignore="MissingConstraints" /><Buttonandroid:id="@+id/music_button_stop"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="50dp"android:layout_marginTop="20dp"android:layout_marginRight="50dp"android:onClick="click_music_stop"android:text="停止播放"tools:ignore="MissingConstraints" /></LinearLayout>

源码资源连接:AndroidService组件实现后台音乐播放项目源码-Java文档类资源-CSDN下载

Android Service组件实现后台音乐播放相关推荐

  1. Android Service的使用方法 音乐播放器实例

    Service翻译成中文是服务,熟悉Windows 系统的同学一定知道很熟悉了.Android里的Service跟Windows里的Service功能差不多,就是一个不可见的进程在后台执行,避免被用户 ...

  2. Android Service使用方法--简单音乐播放实例

    Service翻译成中文是服务,熟悉Windows 系统的同学一定很熟悉了.Android里的Service跟Windows里的Service功能差不多,就是一个不可见的进程在后台执行. Androi ...

  3. Android学习之路4——音乐播放器后台播放

    Android学习之路4--音乐播放器后台播放 一.实验题目 简单音乐播放器 二.实现内容 实现一个简单的播放器,要求功能有: 播放.暂停.停止.退出功能,按停止键会重置封面转角,进度条和播放按钮:按 ...

  4. Android Studio实现简单的音乐播放(播放、暂停、停止、上一首、下一首)

    Android Studio实现简单的音乐播放(播放.暂停.停止.上一首.下一首) 简要介绍 采用Service组件实现后台播放,BroadcastReceiver实现消息传递.BroadcastRe ...

  5. Android课程设计大作业-音乐播放器

    Android课程设计大作业-音乐播放器 一.**主要实现界面效果** 1)登录界面 2)音乐列表界面 3)音乐播放界面 二.**系统设计** 1)使用Service播放音乐 2) 前台界面(Acti ...

  6. Android应用--简、美音乐播放器原型放送(作者:小巫)

    Android应用--简.美音乐播放器原型放送 2013年7月5日简.美音乐播放器开发 前言:小巫的简.美音乐播放器从5月7号开始开发,之前以为时间很充足,也没有估量整个软件的需求,如果简单实现基本的 ...

  7. Android应用--简、美音乐播放器获取专辑图片(自定义列表适配器)

    Android应用--简.美音乐播放器获取专辑图片(自定义列表适配器) 2013年7月3日简.美音乐播放器开发 第二阶段已增加功能: 1.歌词滚动显示 2.来电监听 3.音量控制 4.左右滑动切换歌词 ...

  8. 与众不同 windows phone (40) - 8.0 媒体: 音乐中心的新增功能, 图片中心的新增功能, 后台音乐播放的新增功能...

    原文:与众不同 windows phone (40) - 8.0 媒体: 音乐中心的新增功能, 图片中心的新增功能, 后台音乐播放的新增功能 [源码下载] 与众不同 windows phone (40 ...

  9. Android应用--简、美音乐播放器增加音量控制

    Android应用--简.美音乐播放器增加音量控制 2013年6月26日简.美音乐播放器继续完善中.. 题外话:上一篇博客是在6月11号发的,那篇博客似乎有点问题,可能是因为代码结构有点乱的原因,很难 ...

最新文章

  1. GitHub上7000+ Star的Python常用代码合集
  2. 快速失败Vs安全失败(Java迭代器附示例)
  3. 常见的排序算法(1)
  4. android与php使用base64加密的字符串结果不一样解决方法
  5. python docx 表格打印不显示_python-docx 设置 word 文档中表格格式
  6. Android Framework 全面分析 SystemServer
  7. Windows Phone笔记(5)加速计和位置服务(转)
  8. 医疗病案首页网上直报编码汇总
  9. Cannot execute binary file 之原因
  10. 关于爬网易云音乐时使用fiddler调试JS遇到的问题?
  11. heapdump file must have .hprof extention
  12. 引进国外SD-WAN技术,凌锐蓝信为企业提供跨境网络连接服务
  13. lol网通区服务器的位置,LOL英雄联盟转区系统地址在哪?
  14. 2019 HZNU Winter Training Day 13 Comprehensive Training
  15. linux发行版中的i386/i686/x86-64/有什么区别?
  16. 提交form表单方法
  17. 郭彦甫Matlab第五节笔记——进阶绘图
  18. python爬虫遇到验证码、输入验证码后提醒验证码错误_爬虫遇到头疼的验证码?Python实战讲解弹窗处理和验证码识别...
  19. 大数据入门(Hadoop生态系统)
  20. Alook搭配JS脚本完美食用

热门文章

  1. 讲真,java学习是有些困难,但迎难而上正是男儿本色(附学习资料) !
  2. csu 1020 真三国无双
  3. 不得不使用的百度快照优化seo技巧
  4. Android 虚拟按键隐藏或显示之后共享元素动画异常解决方案
  5. 把一个JAVA程序变成一个可执行文件
  6. 数据库原理及应用第2版(雷景生编著)课后习题答案第4章
  7. 基于图像的虚拟试衣:Image Based Virtual Try-On Network from Unpaired Data
  8. 两年经验的阿里、头条面经(已拿offer),大厂面试套路屡试不爽
  9. Oracle-图形化界面-数据库安装
  10. SQL语句(六)_NUIST