在app内播放后台音频需要调用Service组件

Service组件需要在清单文件里使用标签注册 (一般会自动在文件里注册)

Service 是编写服务组件的抽象基类

onCreate() 和onDestroy() 是Service的2个重要生命周期方法,需要在其内编写代码

非绑定方式启动服务时,不需要在生命周期方法onBind()内编写代码

通过点击按钮播放bgm

service:

package com.example.example5_1;import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;public class MyAudioService extends Service {MediaPlayer mp;@Overridepublic void onCreate() {                  //开始服务时调用super.onCreate();mp = MediaPlayer.create(this,R.raw.white);mp.start();}@Overridepublic void onDestroy() {super.onDestroy();mp.stop();if (mp != null) mp=null;}@Overridepublic IBinder onBind(Intent intent) {           //不可省略的生命周期方法// TODO: Return the communication channel to the service.throw new UnsupportedOperationException("Not yet implemented");}
}

MainActivity:

package com.example.example5_1;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;public class MainActivity extends AppCompatActivity implements View.OnClickListener{Intent intent;Button btn_play,btn_stop;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn_play = findViewById(R.id.btn_play);btn_stop = findViewById(R.id.btn_stop);btn_play.setOnClickListener(this);btn_stop.setOnClickListener(this);}@Overridepublic void onClick(View v){intent = new Intent(this,MyAudioService.class);    //用intent来实现服务的运行和停止int id = v.getId();switch (id){case R.id.btn_play:startService(intent);Toast.makeText(this, "音乐服务进行中...", Toast.LENGTH_SHORT).show();btn_stop.setEnabled(true);btn_play.setEnabled(false);break;case R.id.btn_stop:stopService(intent);btn_stop.setEnabled(false);btn_play.setEnabled(true);}}@Overrideprotected void onDestroy() {           //考虑播放时返回super.onDestroy();if (intent != null) stopService(intent);   //停止服务finish();                                 //关闭}
}

进入app直接后台播放bgm

Service:

package com.example.example5_2;import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.IBinder;public class MyAudioService extends Service {private MediaPlayer mp;public class PlayBinder extends Binder{        //用作代理的内部类public  void MyMethod(){                   //服务方法mp = MediaPlayer.create(getApplicationContext(),R.raw.white);mp.start();}}@Overridepublic IBinder onBind(Intent intent) {// TODO: Return the communication channel to the service.// throw new UnsupportedOperationException("Not yet implemented");return new PlayBinder();                    //返回服务代理类}@Overridepublic void onDestroy() {                //服务销毁时停止音乐播放if (mp != null){mp.stop();mp.release();}super.onDestroy();}
}

MainActivity:

需要创建一个接口ServiceConnection对象来实现建立服务连接时的内容

package com.example.example5_2;import androidx.appcompat.app.AppCompatActivity;import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;public class MainActivity extends AppCompatActivity {
//以绑定方式启动服务(活动和服务绑定),需要建立代理人@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final ServiceConnection connection = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName componentName, IBinder iBinder) {MyAudioService.PlayBinder playBinder = (MyAudioService.PlayBinder) iBinder;//获取代理人对象playBinder.MyMethod();  //调用代理方法}@Overridepublic void onServiceDisconnected(ComponentName componentName) {//断开服务连接}};Intent intent = new Intent(getApplicationContext(),MyAudioService.class);bindService(intent,connection,BIND_AUTO_CREATE);   //绑定服务}
}

代理人

所谓的代理人相当于一个可以帮助 用户 和 程序 进行更好的交互的角色,比如

“取款人——自动取款机——银行服务器” 中的取款机

还有一种远程服务调用音频播放的方法,用的比较少

安卓studio 添加后台bgm音乐的几种方法相关推荐

  1. jQuery添加DOM节点常用的5种方法

    一.内部插入(前插入.后插入): <!DOCTYPE html> <html><head><meta charset="UTF-8"> ...

  2. 【错误记录】NDK 导入外部 so 动态库报错 ( java.lang.UnsatisfiedLinkError | Android Studio 配置外部 so 动态库两种方法 )

    文章目录 一.报错信息 二.解决方案 ( Android Studio 配置外部 so 动态库两种方法 ) 1.jniLibs 目录存放 2.libs 目录存放 一.报错信息 外部引用 so 动态库 ...

  3. linux 添加开机启动项的三种方法。

    原文地址: https://blog.csdn.net/lylload/article/details/79488968 Shell环境变量配置文件:https://blog.csdn.net/yzs ...

  4. ​linux 添加开机启动项的三种方法

    linux 添加开机启动项的三种方法. (1)编辑文件 /etc/rc.local 输入命令:vim /etc/rc.local 将出现类似如下的文本片段: #!/bin/sh # # This sc ...

  5. Linux 添加开机启动项的三种方法

    linux 添加开机启动项的三种方法. (1)编辑文件 /etc/rc.local 输入命令:vim /etc/rc.local 将出现类似如下的文本片段: #!/bin/sh # # This sc ...

  6. 让进程在后台可靠运行的几种方法

    Linux 技巧:让进程在后台可靠运行的几种方法 想让进程在断开连接后依然保持运行?如果该进程已经开始运行了该如何补救? 如果有大量这类需求如何简化操作? 我们经常会碰到这样的问题,用 telnet/ ...

  7. word文档怎么给数字加千分符_word实用技巧:如何为数字添加千分符的3种方法

    我们在用Word做各类文书.标书.策划类时,有时会在文档中书写多位数的金额数据,如下图所示的调薪通知: 看到上方薪资单中的信息我是拒绝的,一般情况下,金额位数比较多时,应该设置添加千分符.但文档中12 ...

  8. excel日历弄到html,Excel中进行添加日历控件的两种方法

    有时我们在运用Excel表格的时候会运用到日历的控件,可是小伙伴们却不知道在哪里添加.那么我们来看一下,它到底躲藏在哪里,又该怎么添加呢?今天,学习啦小编就教大家在Excel中进行添加日历控件的两种方 ...

  9. linux如何把用户加组内,在Linux中将用户添加到特定组的四种方法

    在Linux中将用户添加到特定组的四种方法 Linux组是用于管理Linux中用户帐户的组织单位. 对于Linux系统中的每个用户和组,它都有唯一的数字标识号. 它称为用户ID(UID)和组ID(GI ...

最新文章

  1. 【Android】JNICALL could not be resolved
  2. 【AutoML】如何使用强化学习进行模型剪枝?
  3. 2018蓝桥杯省赛---java---C---8(等腰三角形)
  4. java 内存同步_Java中的硬件事务性内存,或者为什么同步将再次变得很棒
  5. 手机联系人头像包_一组抖音上很火的表情包,这里都有,一起来可可爱爱吧
  6. mysqlbinlog抽取某个表的信息
  7. 欧姆龙PLC CP1H与变频器通信要点总结
  8. Android TTS(TextToSpeech)实践
  9. android 火车购票功能,12306 火车票订票
  10. 第二部分 项目管理标准
  11. 产品经理:个人能力提升方法
  12. 合成全身火焰燃烧人物海报图片的PS教程
  13. 2002111126 邱新辉
  14. Mac 鼠标卡顿现象
  15. 总结2019大前端开发十大战略性技术布局
  16. 软件工程知识点总结汇总
  17. git忽略已加入版本控制的文件
  18. 语文(文学)类智力竞赛题荟萃
  19. java二重循环_java二重循环
  20. 怎么将翼型导入catia_CATIA翼型数据导入与曲面生成CATIA翼型数据导入与曲面生成.doc...

热门文章

  1. 为什么我要现在复习学习数据结构和算法
  2. 【sdx62】XBL设置共享内存变量,然后内核层获取变量实现
  3. 霸气牵手众多手机品牌商,苏宁手机蜜蜂节实力彰显行业影响力
  4. 人脸识别中的活体检测算法综述
  5. 【附源码/完整教程】如何使用C语言打造人机对战版五子棋?
  6. 语义分割(三)Unet++
  7. Ubuntu server安装ubuntu桌面,安装软件中心-ubuntu software
  8. C补习--------->第六天,二级指针、指针和数组的关系、选择排序
  9. 进阶版--Mongodb命令汇总
  10. layui数据表格重载与导出