Android实现本地Service方法控制音乐播放

 更新时间:2021年03月31日 09:59:51   作者:飞哥来了  
这篇文章主要为大家详细介绍了Android实现本地Service方法控制音乐播放,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

问题现象描述:在Activity中控制播放时,按返回键退出应用后,音乐可在后台继续播放。重新进入app,音乐无法停止,重新点击开始播放音乐,出现重复的音乐同时播放的现象(多个同时播放)。如何解决?

解决方法:使用本地Service的方式来控制音乐的播放,app返回退出了,重新进入App也可以正常终止。

1、主Activity控制音乐 的开始、暂停、停止、退出空能,(具体实现在下面MusicService.java中实现)

/**
 * Activity播放广播,返回键返回后,重新进入无法停止
 *
 * 通过start启动服务的方式 控制音乐播放
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
 private Button btn_main_play;
 private Button btn_main_stop;
 private Button btn_main_pause;
 private Button btn_main_exit;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
 
  btn_main_play = findViewById(R.id.btn_main_play);
  btn_main_stop = findViewById(R.id.btn_main_stop);
  btn_main_pause = findViewById(R.id.btn_main_pause);
  btn_main_exit = findViewById(R.id.btn_main_exit);
 
  btn_main_play.setOnClickListener(this);
  btn_main_stop.setOnClickListener(this);
  btn_main_pause.setOnClickListener(this);
  btn_main_exit.setOnClickListener(this);
 }
 
 /**
  * 按钮点击监听事件 将点击的类型传给服务进行判断
  * @param v
  */
 @Override
 public void onClick(View v) {
  Intent intent = new Intent(this,MusicService.class);
  switch ( v.getId()){
   case R.id.btn_main_play://播放
    intent.putExtra("action","play");
    startService(intent);
    break;
   case R.id.btn_main_stop://停止
    intent.putExtra("action","stop");
    startService(intent);
    break;
   case R.id.btn_main_pause://暂停
    intent.putExtra("action","pause");
    startService(intent);
    break;
   case R.id.btn_main_exit://退出并关闭音乐
    //停止服务
    stopService(intent);
    finish();
    break;
   default:
 
  }
 }
}

2、activity_main.xml布局代码省略,效果图如下:

3、创建音乐播放器处理流程的服务 MusicService.java:

/**
 * 通过服务控制音乐的播放
 */
public class MusicService extends Service {
 public MusicService() {
 }
 
 //创建播放器对象
 private MediaPlayer player;
 
 @Override
 public IBinder onBind(Intent intent) {
  throw new UnsupportedOperationException("Not yet implemented");
 }
 
 @Override
 public int onStartCommand(Intent intent, int flags, int startId) {
  //获取MainActivity中 按钮的点击类型:根据不同类型处理不同事件
  String action = intent.getStringExtra("action");
  if ("play".equals(action)) {
   //播放
   playMusic();
  } else if ("stop".equals(action)) {
   //停止
   stopMusic();
  } else if ("pause".equals(action)) {
   //暂停
   pauseMusic();
  }
  return super.onStartCommand(intent, flags, startId);
 }
 
 /**
  * 播放音乐
  */
 public void playMusic() {
  if (player == null ) {
   player= MediaPlayer.create(this,R.raw.kkth_myr);
  }
  player.start();
 }
 
 /**
  * 暂停播放
  */
 public void pauseMusic() {
  if (player != null && player.isPlaying()) {
   player.pause();
  }
 }
 
 /**
  * 停止播放
  */
 public void stopMusic() {
  if (player != null) {
   player.stop();
   player.reset();//重置
   player.release();//释放
   player = null;
  }
 }
 
 @Override
 public void onDestroy() {
  super.onDestroy();
  //在服务死亡之前停止音乐
  stopMusic();
 }
}

创建服务看一下配置文件AndroidManifest.xml中是否添加了对应的<Service>标签。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • android中Handle类的用法实例分析

    android中Handle类的用法实例分析

    这篇文章主要介绍了android中Handle类的用法,以实例形式较为详细的分析了基于Handle类线程执行的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • Android仿微信图片选择器

    Android仿微信图片选择器

    这篇文章主要为大家详细介绍了Android仿微信图片选择器的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Android仿微信、录制音频并发送功能

    Android仿微信、录制音频并发送功能

    这篇文章主要介绍了Android仿微信、录制音频并发送功能的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Android 截图功能源码的分析

    Android 截图功能源码的分析

    这篇文章主要介绍了Android 截图功能源码的分析的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • Flutter开发技巧RadialGradient中radius计算详解

    Flutter开发技巧RadialGradient中radius计算详解

    这篇文章主要为大家介绍了Flutter小技巧RadialGradient 中 radius 的计算详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Android NDK开发的环境搭建与简单示例

    Android NDK开发的环境搭建与简单示例

    本文主要介绍Android NDK的知识,这里整理了相关资料,来说明如何搭建相应环境和简单实例,帮助大家理解,有兴趣的小伙伴可以参考下
    2016-09-09
  • Android性能优化之图片大小,尺寸压缩综合解决方案

    Android性能优化之图片大小,尺寸压缩综合解决方案

    随着Android手机的越来越先进,给我们开发者而言传递的图片也是越来越大,这个时候我们可以对一些没有必要原图展示的图片进行压缩,这篇文章主要给大家介绍了关于Android性能优化之图片大小,尺寸压缩的综合解决方案,需要的朋友可以参考下
    2022-04-04
  • 浅析Android 的 MediaPlayer类

    浅析Android 的 MediaPlayer类

    本文主要介绍了Android的mediaplayer类作用和用法,并附上了关键代码,有需要的朋友可以参考下
    2014-10-10
  • Android实现自定义华丽的水波纹效果

    Android实现自定义华丽的水波纹效果

    关于Android的水波纹效果小编之前给大家也分享几篇类似的,有兴趣可通过下面的相关文章进行查看,今天给大家再分享一个华丽的水波纹效果,这个效果很不错,感兴趣的可以参考借鉴。
    2016-08-08
  • Android判断设备网络连接状态及判断连接方式的方法

    Android判断设备网络连接状态及判断连接方式的方法

    这篇文章主要介绍了Android判断设备网络连接状态及判断连接方式的方法,涉及Android针对网络连接的相关判定技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10

最新评论