基于ExoPlayer的自定义通知栏的音频播放服务

2023-10-23 12:30

本文主要是介绍基于ExoPlayer的自定义通知栏的音频播放服务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言在接手的项目中,有用到音频播放功能,而用到的库基本以及停止维护了(虽然也是基于exoplayer的库),但通知栏样式只有一种就是默认的,若遇到设计需要改,比较难,还需要拷贝库源代码进行修改,针对这一点,同时也为了更好的学习,于是就写了一个通用的带有自定义通知栏的音频服务,当然这也是基于exoplayer最新版本

1.仓库引入

//root/build
allprojects {repositories {...maven { url 'https://jitpack.io' }}
}//app/build
implementation 'com.github.IAmWilling:MediaPlayerServer:1.0.1'

2.初始化播放服务

//Application下初始化
//参数1 Application 参数2 Notification实例(DefaultNotification内部封装需要传入此实例可高度自定义API参考下面)
MediaPlayerService.init(this,DefaultNotification.Builder().build())

3.音频监听器

//音频播放状态
interface MediaPlayStateListener
//音频进度
interface MediaProgressListener
//音频切换声音
interface MediaSwitchTrackChange
//音频错误监听
interface MediaErrorListener

3.使用

MediaManager 音频管理类含有播放以及暂停等功能

/**
* @param itemList 需要实现PlaylistItem接口
* @param index 选择播放 默认为0
*/
MediaManager.playList(item:PlaylistItem,playIndex:Int = 0)
//上一首
MediaManager.playLast()
//下一首
MediaManager.playNext()
//设置播放模式
MediaManager.switchPlayMode(mode:Int)
//exoPlayer实例 若是有些功能没有实现,则可以拿到实例进行相应功能调用
MediaManager.getSimpleExoPlayer()
//等等....具体查看该类SDK API

4.API详解

MediaManager API

    /*** 添加进度监听*/fun addProgressListener(mediaProgressListener: MediaProgressListener)/*** 添加音频播放状态监听*/fun addMediaPlayerStateListener(mediaPlayStateListaner: MediaPlayStateListaner)/*** 添加音频错误监听*/fun addMediaErrorListener(mediaErrorListener: MediaErrorListener) /*** 移除音频进度监听*/fun removeProgressListener(mediaProgressListener: MediaProgressListener) /*** 移除音频错误监听*/fun removeErrorListener(mediaErrorListener: MediaErrorListener) /*** 移除音频改变监听*/fun removeMediaSwitchChange(mediaSwitchTrackChange: MediaSwitchTrackChange) /*** 添加音频改变监听*/fun addMediaSwitchChange(mediaSwitchTrackChange: MediaSwitchTrackChange) /*** 是否正在播放*/fun isPlaying()/*** 当前音频缓存的封面bitmap*/fun getCacheBitmap(): Bitmap/*** 设置当前id的bitmap*/fun setCacheBitmap(bitmap: Bitmap)/*** 播放下一首*/fun playNext(): Boolean /*** 播放上一首*/fun playLast(): Boolean/*** 播放切换*/fun playOrPause()/*** 播放列表(按顺序播放)** @param mutableList 播放列表*/fun playlist(mutableList: MutableList<PlaylistItem>, playIndex: Int = 0) /*** {@see #MediaPlayerExoPlayMode}** 切换音频播放模式*/fun switchPlayMode(@MediaPlayerExoPlayMode mode: Int) /*** 获取当前播放id*/fun currentId() = simpleExoPlayer.currentMediaItem?.mediaId/*** 获取播放实例*/fun getSimpleExoPlayer(): SimpleExoPlayer /*** 获取播放总进度*/fun getCurrentDuration()/*** 获取当前音频标题*/fun getCurrentMediaTitle(): String /*** 获取当前音频详情*/fun getCurrentMediaDesc(): String /*** 获取当前音频封面地址*/fun getCurrentMediaCover(): String /*** 获取当前播放模式** @link {#MediaPlayerExoPlayMode}*/fun getCurrentPlayMode(): Int

Notification.Builder API

     /*** 设置通知栏应用图标*/fun setSmallIcon(resid: Int): Builder /*** 设置通知栏自定义布局* 不设置 则 默认是sdk自带布局*/fun setRemoteViews(layoutId: Int): Builder /*** 设置图标*/fun setLargeIcon(icon: Bitmap?): Builder/*** 设置播放状态* 非必要初始化不需要设置*/fun setPlayState(state: Boolean): Builder /*** 设置通知栏音频标题* 初始化可设置初始标题*/fun setTitleText(title: String): Builder /*** 设置通知栏布局详情* 初始化可设置初始详情*/fun setIntroText(intro: String): Builder/*** 设置封面*/fun setMediaCover(bitmap: Bitmap): Builder /*** 设置播放状态时的图片*/fun setPlayImage(resid: Int): Builder/*** 设置暂停状态时的图片*/fun setPauseImage(resid: Int): Builder /*** 设置上一曲图片*/fun setLastImage(resid: Int): Builder /*** 设置下一曲图片*/fun setNextImage(resid: Int): Builder/*** 设置通知栏适配小型布局* 有些手机需要设置比如小米,总是初始为小布局 * 锁屏界面需要的话 可以设置*/fun setSmallRemoteViews(layoutId: Int): /*** 设置通知栏整体点击之后需要跳转的activity组* 一般最后一个activity是你需要最终跳转到activity* 第一个一般都是MainActivity 看需求*/fun setStartActivityClassArray(array: Array<Class<*>>): Builder/*** 跳转之后需要携带的一些数据可以自己设置 * 但这些数据最好是全局都可以拿到的,比如在MediaManager可以拿到的任何数据等*/fun setStartActivityBundle(extraName: String, block: () -> Bundle): Builder /*** 打包*/fun build(): Notification

5.自定义通知栏布局注意事项(重要

标题和详情需要为TextView 其余的需要设置的id组件都是ImageView 或者说也只能是ImageView

  • 若要展示封面则ImageView需要设置id为:”default_song_cover_img“
  • 若要展示通知栏的关闭按钮则ImageView需要设置id为:
    “default_notific_close”
  • 上一首:“default_last”
  • 下一首:“default_next”
  • 播放与暂停: “default_play”
  • 歌曲标题:“default_song_name”
  • 歌曲详情:“default_song_intro”

6.看Demo具体的操作设置

效果图:

库地址:github_链接

点个star就是我的动力,继续学习!

这篇关于基于ExoPlayer的自定义通知栏的音频播放服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/267851

相关文章

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

SpringBoot 自定义消息转换器使用详解

《SpringBoot自定义消息转换器使用详解》本文详细介绍了SpringBoot消息转换器的知识,并通过案例操作演示了如何进行自定义消息转换器的定制开发和使用,感兴趣的朋友一起看看吧... 目录一、前言二、SpringBoot 内容协商介绍2.1 什么是内容协商2.2 内容协商机制深入理解2.2.1 内容

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s