安卓手机APP开发__用媒体会话服务进行后台播放

安卓手机APP开发__媒体开发部分__用媒体会话服务进行后台播放

目录

概述

使用一个媒体会话服务

实现服务的生命周期

提供对媒体会话的读取

在配置文件中声明服务


概述

当APP不在前台时,经常希望能够播放媒体。例如,一个音乐播放器
在用户锁屏或者是使用其它的APP时,通常是保持音乐播放的。
媒体3库提供了一系列的接口来允许你支持后台的播放。

使用一个媒体会话服务

为了启用后台播放,你应该包括播放器和在一个单独的服务中包括媒体会话。
这允许设备当你的APP不在前台时,继续进行媒体的服务。

媒体会话服务允许媒体的会话独立于APP的活动而运行。

当一个播放器在一个服务中时,你应该使用一个媒体会话服务。为了做这一点,
创建一个类来扩展媒体会话服务,并且创建你的媒体的会话在服务里。

使用媒体会话服务对于外部的客户端 连接你的APP,控制播放,而没有读取你的APP的用户
界面的活动,成为了可能。事实上,会有多个客户端的APP同时连接媒体会话服务,每个
APP都有它自己的媒体控制器。

实现服务的生命周期

你需要实现你的服务的三个生命周期的方法:


当第一个控制器要连接服务,服务被实例化和启动后,调用了onCreate()方法。
它是构建播放器和媒体会话的最好的地方。

当用户离开当前的任务时,调用onTaskRemoved(Intent)方法。如果播放在继续,
APP选择保持服务运行在前台。如果播放器被暂停,服务不在前台,需要被停止了。

当服务被停止时,调用onDestroy()方法,所有的资源包括播放器和会话都需要被释放。


Kotlin

class PlaybackService : MediaSessionService() {private var mediaSession: MediaSession? = null// Create your player and media session in the onCreate lifecycle eventoverride fun onCreate() {super.onCreate()val player = ExoPlayer.Builder(this).build()mediaSession = MediaSession.Builder(this, player).build()}// The user dismissed the app from the recent tasksoverride fun onTaskRemoved(rootIntent: Intent?) {val player = mediaSession?.player!!if (!player.playWhenReady|| player.mediaItemCount == 0|| player.playbackState == Player.STATE_ENDED) {// Stop the service if not playing, continue playing in the background// otherwise.stopSelf()}}// Remember to release the player and media session in onDestroyoverride fun onDestroy() {mediaSession?.run {player.release()release()mediaSession = null}super.onDestroy()}
}

当用户离开APP时,APP能停止服务。
Kotlin

override fun onTaskRemoved(rootIntent: Intent?) {val player = mediaSession.playerif (player.playWhenReady) {// Make sure the service is not in foreground.player.pause()}stopSelf()
}

提供对媒体会话的读取

当服务创建后,覆盖onGetSession()方法,来给其它的客户端读取你的媒体会话

Kotlin

class PlaybackService : MediaSessionService() {private var mediaSession: MediaSession? = null// [...] lifecycle methods omittedoverride fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaSession? =mediaSession
}

在配置文件中声明服务

一个APP在运行前台服务时需要权限。在配置文件中加上前台服务的权限,
如果是API在34及以上还要加上FOREGROUND_SERVICE_MEDIA_PLAYBACK。

<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />

你也必须在配置文件中声明你的服务类,使用媒体会话服务的过滤器。

<serviceandroid:name=".PlaybackService"android:foregroundServiceType="mediaPlayback"android:exported="true"><intent-filter><action android:name="androidx.media3.session.MediaSessionService"/></intent-filter>
</service>

你必须定义一个前台的服务类型,当你的APP运行在安卓10(API级别29)及以上时,
它要包括媒体播放。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/6728.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【云原生】Docker 的网络通信

Docker 的网络通信 1.Docker 容器网络通信的基本原理1.1 查看 Docker 容器网络1.2 宿主机与 Docker 容器建立网络通信的过程 2.使用命令查看 Docker 的网络配置信息3.Docker 的 4 种网络通信模式3.1 bridge 模式3.2 host 模式3.3 container 模式3.4 none 模式 4.容器间的通信4.…

Stream流操作

看到Stream流这个概念&#xff0c;我们很容易将其于IO流联系在一起&#xff0c;事实上&#xff0c;两者并没有什么关系&#xff0c;IO流是用于处理数据传输的&#xff0c;而Stream流则是用于操作集合的。 当然&#xff0c;为了方便我们区分&#xff0c;我们依旧在这里复习一下…

长期找 AI 专家,邀请参加线上聊天直播

诚邀 AI 专家参加线上聊天&#xff0c;成为嘉宾。 分享前沿观点、探讨科技和生活 除节假日外&#xff0c;每周举办在线聊天直播 根据话题和自愿形式结合&#xff0c;每期 2~3 位嘉宾 成为嘉宾&#xff0c;见下&#xff1a;

小程序端的懂车帝二手车数据采集

import datetime import random import string import time import pymysql import requests import json def mysql_sql(conn, cur): """创建一个存储数据表和一个存储链接表""" cur.execute( CREATE TABLE if not exists dcd_x…

AcWing 851:spfa求最短路 ← 链式前向星存图

【题目来源】https://www.acwing.com/problem/content/853/【题目描述】 给定一个 n 个点 m 条边的有向图&#xff0c;图中可能存在重边和自环&#xff0c; 边权可能为负数。 请你求出 1 号点到 n 号点的最短距离&#xff0c;如果无法从 1 号点走到 n 号点&#xff0c;则输出 i…

ADS软件(PathWave 先进设计系统软件)分享与安装

ADS软件的简介 ADS软件&#xff08;Advanced Design System&#xff09;主要用于射频&#xff08;RF&#xff09;、微波&#xff08;Microwave&#xff09;和毫米波&#xff08;Millimeter-wave&#xff09;电路的设计、仿真和分析。它提供了一套强大的工具和功能&#xff0c;…

【STM32项目】基于STM32多传感器融合的新型智能导盲杖设计(完整工程资料源码)

基于STM32多传感器融合的新型智能导盲杖设计演示效果 基于stm32智能盲杖 前言: 目前,中国盲人数量已突破两千万大关,而城市盲道设计不合理、盲道被非法侵占等危害盲人出行安全的问题屡禁不止[1-3]。随着科技发展,智能盲杖不断涌现,但这些智能盲杖并不智能[4,5]。针对市售…

Angular进阶-NVM管理Node.js实现不同版本Angular环境切换

一、NVM介绍 1. NVM简介 Node Version Manager&#xff08;NVM&#xff09;是一个用于管理多个Node.js版本的工具。它允许用户在同一台机器上安装和使用多个Node.js版本&#xff0c;非常适合需要同时进行多个项目的开发者。NVM是开源的&#xff0c;支持MacOS、Windows和Linux…

【解决】docker一键部署报错

项目场景见&#xff1a;【记录】Springboot项目集成docker实现一键部署-CSDN博客 问题&#xff1a; 1.docker images 有tag为none的镜像存在。 2.有同事反馈&#xff0c;第一次启动docker-compose up -d 项目无法正常启动。后续正常。 原因&#xff1a; 1.服务中指定了镜像m…

laravel、tp等框架底层代码config方法实现示例

剖析php如何优雅得实现框架config方法核心代码 在php的laravel、tp框架中,普遍采用配置文件直接return数组的方式存放配置信息、日常的代码编写我们并不会这样做&#xff0c;其实核心代码很简单,只需要把include file赋值给变量即可 php if(!function_exists("config&quo…

Eclipse中开启服务,网页无法打开 运行程序显示404

一、eclipse中开启服务后&#xff0c;网页无法打开的问题 当你在eclipse中开启服务后&#xff0c;如果网页无法打开&#xff0c;可能是以下几个原因导致的&#xff1a; 1. 端口冲突&#xff1a;请确保你所使用的端口没有被其他程序占用。可以尝试更换一个未被占用的端口。 2…

【QEMU系统分析之实例篇(十四)】

系列文章目录 第十四章 QEMU系统仿真的机器创建分析实例 文章目录 系列文章目录第十四章 QEMU系统仿真的机器创建分析实例 前言一、QEMU是什么&#xff1f;二、QEMU系统仿真的机器创建分析实例1.系统仿真的命令行参数2.完成早期后端驱动的设置工作qemu_create_early_backends(…

Jackson-jr 对比 Jackson

关于Jackson-jr 对比 Jackson 的内容&#xff0c;有人在做了一张下面的图。 简单点来说就 Jackson-jr 是Jackson 的轻量级应用&#xff0c;因为我们在很多时候都用不到 Jackson 的很多复杂功能。 对很多应用来说&#xff0c;我们可能只需要使用简单的 JSON 读写即可。 如我们…

【Linux网络】网络文件共享

目录 一、存储类型 二、FTP文件传输协议 2.1 FTP工作原理 2.2 FTP用户类型 2.3 FTP软件使用 2.3.1 服务端软件vsftpd 2.3.2 客户端软件ftp 2.4 FTP的应用 2.4.1 修改端口号 2.4.2 匿名用户的权限 2.4.3 传输速率 三、NFS 3.1 工作原理 3.2 NFS软件介绍 3.3 NFS配…

企业级数据治理学习总结

1. 水在前面 “数据治理”绝对是吹过的牛里面最高大上的题目了&#xff0c;本来想直接以《企业级数据治理》为题来水的&#xff0c;码字前又跑去图书馆借了几本书&#xff0c;翻了几页才发现自己连半桶水都提不起&#xff0c;撑死只能在小屁孩跟前吹吹牛。 好吧&#xff0c;实在…

怎么把jpg图片变成gif?参考这个方法一键制作

Jpg图片如何变成gif图片&#xff1f;Jpg、gif都是最常用的图片格式&#xff0c;想要将这两种格式的图片互相转化的时候要怎么操作呢&#xff1f;想要将jpg图片变成gif方法很简单&#xff0c;只需要使用gif图片制作&#xff08;https://www.gif5.net/&#xff09;工具-GIF5工具网…

华为手机ip地址怎么切换

随着移动互联网的普及&#xff0c;IP地址成为了我们手机上网的重要标识。然而&#xff0c;在某些情况下&#xff0c;我们可能需要切换手机的IP地址&#xff0c;以更好地保护个人隐私、访问特定地区的内容或服务&#xff0c;或者出于其他网络需求。华为手机作为市场上的热门品牌…

开源相机管理库Aravis学习——pixel format编码规则

开源相机管理库Aravis学习——pixel format编码规则 前言前置知识PixelFormatBpp 编码规则源码分析分类标准 补充ARV_PIXEL_FORMAT_BIT_PER_PIXEL 参考文章 前言 在学习Aravis官方例程的时候&#xff0c;有这么一个函数&#xff1a;arv_camera_get_pixel_format&#xff0c;它…

Docker安装MySQL8数据表名大小写问题

项目使用了Flowable工作流&#xff0c;导入sql时候需要MySQL忽略大小写&#xff0c;使用MySQL5.7时可以通过 在my.cnf文件中添加lower_case_table_names1实现。 [mysqld] lower_case_table_names1使用MySQL8上述方法失效&#xff0c;可以通过创建Docker容器时添加参数--lower_…

微信小程序开发中的网络请求和数据获取:从入门到实践

微信小程序开发中的网络请求和数据获取&#xff1a;从入门到实践 在微信小程序开发中&#xff0c;网络请求和数据获取是构建动态、交互式应用的关键环节。本文将深入探讨微信小程序的网络请求机制&#xff0c;并提供丰富的代码示例&#xff0c;帮助读者从零开始掌握这一重要技…