广告
返回顶部
首页 > 资讯 > 移动开发 >Android通过startService播放背景音乐
  • 924
分享到

Android通过startService播放背景音乐

音乐Android 2022-06-06 09:06:38 924人浏览 八月长安
摘要

关于startService的基本使用概述及其生命周期可参见《Android中startService基本使用方法概述》。 本文通过播放背景音乐的简单示例,演示startSer

关于startService的基本使用概述及其生命周期可参见《Android中startService基本使用方法概述》。

本文通过播放背景音乐的简单示例,演示startService的基本使用流程,具体内容如下

系统界面如下:

界面上面就两个按钮,”播放音乐并退出Activity” 和 “停止播放音乐”。我们在该示例中,通过操纵Activity的按钮控制MusicService播放或停止播放音乐。

我将一个名为music.mp3的放到资源目录/res/raw文件夹下面,这样我们在程序中就可以通过R.raw.music引用该音乐文件,放入/res/raw文件夹中的资源文件会保持原来的面貌不会被编译成二进制。

MusicService是用于播放背景音乐的Service,其代码如下所示:


package com.ispring.startservicedemo;
import Android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.widget.Toast;
import java.io.IOException;
public class MusicService extends Service {
  private MediaPlayer mediaPlayer = null;
  private boolean isReady = false;
  @Override
  public void onCreate() {
    //onCreate在Service的生命周期中只会调用一次
    super.onCreate();
    //初始化媒体播放器
    mediaPlayer = MediaPlayer.create(this, R.raw.music);
    if(mediaPlayer == null){
      return;
    }
    mediaPlayer.stop();
    mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
      @Override
      public boolean onError(MediaPlayer mp, int what, int extra) {
        mp.release();
        stopSelf();
        return false;
      }
    });
    try{
      mediaPlayer.prepare();
      isReady = true;
    } catch (IOException e) {
      e.printStackTrace();
      isReady = false;
    }
    if(isReady){
      //将背景音乐设置为循环播放
      mediaPlayer.setLooping(true);
    }
  }
  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    //每次调用Context的startService都会触发onStartCommand回调方法
    //所以onStartCommand在Service的生命周期中可能会被调用多次
    if(isReady && !mediaPlayer.isPlaying()){
      //播放背景音乐
      mediaPlayer.start();
      Toast.makeText(this, "开始播放背景音乐", Toast.LENGTH_LONG).show();
    }
    return START_STICKY;
  }
  @Override
  public IBinder onBind(Intent intent) {
    //该Service中不支持bindService方法,所以此处直接返回null
    return null;
  }
  @Override
  public void onDestroy() {
    //当调用Context的stopService或Service内部执行stopSelf方法时就会触发onDestroy回调方法
    super.onDestroy();
    if(mediaPlayer != null){
      if(mediaPlayer.isPlaying()){
        //停止播放音乐
        mediaPlayer.stop();
      }
      //释放媒体播放器资源
      mediaPlayer.release();
      Toast.makeText(this, "停止播放背景音乐", Toast.LENGTH_LONG).show();
    }
  }
}

MusicActivity的代码如下所示:


package com.ispring.startservicedemo;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MusicActivity extends Activity implements Button.OnClickListener {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_music);
  }
  @Override
  public void onClick(View v) {
    if(v.getId() == R.id.btnStart){
      //播放背景音乐
      Intent intent = new Intent(this, MusicService.class);
      startService(intent);
      //退出当前Activity
      this.finish();
    }else if(v.getId() == R.id.btnStop){
      //停止播放音乐
      Intent intent = new Intent(this, MusicService.class);
      stopService(intent);
    }
  }
}

当我们单击了按钮”播放音乐并退出Activity”之后,我们首先通过Activity的startService启动MusicService,然后我们立即调用了Activity的finish方法销毁了当前的Activity。可能大家会问为什么要销毁当前的Activity?我们此处之所以调用Activity的finish方法不是从功能的角度出发的,而是从理解代码运行的角度故意这么写的: 执行完Activity的finish方法之后,当前的Activity就销毁了, 在界面上看起来就是当前UI消失了,应用程序退出了,但稍等片刻你会听到背景音乐响起。这从侧面印证了Service的一个特性: Service与Activity等一样,也是一种基本的应用程序组件,Service无需依赖任何的Activity便可独自在没有任何UI界面的情况下悠闲地在Android后台默默运行。

调用了startService之后,Android Framework接收到了intent信息,第一次会先创建MusicService的实例,执行MusicService的onCreate回调方法,onCreate在Service的生命周期中只会调用一次,我们在其onCreate方法中将R.raw.music初始化为媒体播放器,并调用媒体播放器的prepare方法。然后我们将播放器设置为循环播放状态。需要注意的是,在实际生产环境中,我们应该注册播放器的setOnPreparedListener并调用prepareAsync()方法,为了简化代码起见,我们只调用了播放器的同步方法prepare()。

调用了onCreate方法后,Android会自动回调其onStartCommand方法,其实每次调用Context的startService都会触发onStartCommand回调方法,所以onStartCommand在Service的生命周期中可能会被调用多次。所以我们在MusicService的onStartCommand中做了判断,判断播放器是否是在播放中,如果当前播放器没有播放我们才调用播放器的start方法播放背景音乐。

当我们单击了按钮”播放音乐并退出Activity”之后,MusicService启动起来,播放背景音乐,但是Activity却销毁了,程序的UI界面不见了。为了能够停止播放背景音乐,我们需要再次单击应用程序图标,重新打开MusicActivity,然后单击界面上的”停止播放音乐”按钮,此时我们会调用Activity的stopService方法,Android Framework接收到要停止服务的intent之后会回调MusicService的onDestroy方法,在该方法中我们停止播放音乐并释放媒体播放器资源。

本文只是通过播放背景音乐这一简单示例演示通过startService启动Service基本使用流程,代码没有进行优化,希望对大家学习Service有所帮助。

您可能感兴趣的文章:android studio 3.0 service项目背景音乐实现android中暂停背景音乐Android开启新线程播放背景音乐


--结束END--

本文标题: Android通过startService播放背景音乐

本文链接: https://www.lsjlt.com/news/26138.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android通过startService播放背景音乐
    关于startService的基本使用概述及其生命周期可参见《Android中startService基本使用方法概述》。 本文通过播放背景音乐的简单示例,演示startSer...
    99+
    2022-06-06
    音乐 Android
  • java实现播放背景音乐
    本文实例为大家分享了java实现播放背景音乐的具体代码,供大家参考,具体内容如下 测试源码 播放背景音乐类 package forGame; import javax.soun...
    99+
    2022-11-11
  • 微信小程序播放背景音乐
    1.实现效果 2.实现原理 1、wx.getBackgroundAudioManager : 获取全局唯一的背景音频管理器。 小程序切入后台,如果音频处于播放状态,可以继续播放。但是后台状态不能通过调用API操纵音频的播放状态。 从微信客...
    99+
    2023-09-20
    微信小程序 小程序
  • java如何实现播放背景音乐
    这篇文章主要介绍java如何实现播放背景音乐,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!测试源码播放背景音乐类package forGame;import javax.sound.sampled...
    99+
    2023-06-14
  • 怎么在Dreamweaver里面添加音乐播放器背景音乐
    这篇文章主要讲解了“怎么在Dreamweaver里面添加音乐播放器背景音乐”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在Dreamweaver里面添加音乐播放器背景音乐”吧! ...
    99+
    2023-06-08
  • Android微信小程序播放背景音乐怎么实现
    这篇文章主要介绍“Android微信小程序播放背景音乐怎么实现”,在日常操作中,相信很多人在Android微信小程序播放背景音乐怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android微信小程序播...
    99+
    2023-06-26
  • ppt背景音乐如何设置从头到尾播放
    本篇内容主要讲解“ppt背景音乐如何设置从头到尾播放”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ppt背景音乐如何设置从头到尾播放”吧!ppt背景音乐设置从头到尾播放的方法:首先进入ppt音乐...
    99+
    2023-07-02
  • win7系统怎么禁止网页播放背景音乐?
    相信有很多用户都习惯一边听音乐一边浏览网页,但是当我们打开网页时可能会传出一些不和谐的背景声音,让整个音乐变得很嘈杂,那么有什么方法能够禁止网 1、在Win7电脑系统上点击任务栏处的音乐图标,然后在弹出的面板上选择&ld...
    99+
    2023-06-15
    win7系统桌面背景变黑 win7系统自带播放器 win7系统播放器 系统 win7 播放 网页
  • HTML5中如何实现背景音乐自动播放功能
    小编给大家分享一下HTML5中如何实现背景音乐自动播放功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!音乐的自动播放属性,这里...
    99+
    2022-10-19
  • 微信小程序播放背景音乐的实例代码
    目录1.实现效果2.实现原理3.实现代码1.实现效果 2.实现原理 1、wx.getBackgroundAudioManager :获取全局唯一的背景音频管理器。 小程序切入后台,...
    99+
    2022-11-12
  • Android Studio实现音乐播放器2.0的全过程
    目录一、引言二、项目概述1、需求分析2、设计分析3、资源文件分析三、开发环境四、优化设计1、上一首下一首2、个性化按钮五、运行效果六、项目总结一、引言 我在一年前发过一篇用Andro...
    99+
    2022-11-13
  • android通过SQLite数据库的操作如何实现音乐播放器
    android通过SQLite数据库的操作如何实现音乐播放器,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。下面实现播放列表的功能。当选择某...
    99+
    2022-10-19
  • firefox浏览器中播放背景音乐的解决方法是什么
    firefox浏览器中播放背景音乐的解决方法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在Firefox下播放背景音乐的代码 打开一个空白控制...
    99+
    2023-06-08
  • 如何通过PHP实现音乐播放器的隐藏功能
    要通过PHP实现音乐播放器的隐藏功能,可以按照以下步骤进行操作:1. 创建一个音乐播放器的HTML页面,包括音乐播放器的界面和控制按...
    99+
    2023-08-28
    PHP
  • Android Studio实现音乐播放器的全过程(简单易上手)
    目录前言一、项目概述1、需求分析2、设计分析3、资源文件分析二、开发环境三、准备工具四、详细设计1、搭建主界面布局2、创建服务类2.1、服务概述2.2、服务的创建2.3、服务的启动方...
    99+
    2022-11-13
  • Android音频处理之通过AudioRecord去保存PCM文件进行录制,播放,停止,删除功能
    音频这方面很博大精深,我这里肯定讲不了什么高级的东西,最多也只是一些基础类知识,首先,我们要介绍一下Android他提供的录音类,实际上他有两个,一个是MediaRecorde...
    99+
    2022-06-06
    pcm Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作