Android如何实现原生锁屏页面音乐控制
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要为大家展示了"Android如何实现原生锁屏页面音乐控制",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Android如何实现原生锁屏页面音乐控
千家信息网最后更新 2025年11月07日Android如何实现原生锁屏页面音乐控制
这篇文章主要为大家展示了"Android如何实现原生锁屏页面音乐控制",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Android如何实现原生锁屏页面音乐控制"这篇文章吧。
Android5.0 提出了全新的MediaSession概念用于播放器与控制器之间进行交互,它取代之前的RemoteControlClient,并提供了更为灵活的客户端受控端模型。
但是MediaSession框架只能在安卓5系统上使用,如何兼容低版本呢? Google在support-v4(21以上版本)中也提供了MediaSessionCompact兼容包。通过它可以告诉Android系统与其他的应用,自己正在播放的内容是什么以及自己支持哪些类型的播放控制。
在播放音乐时,通过MediaSessionCompat可以实现锁屏按键上的监听,从而转换成自己的操作。
本文介绍的是基于MediaSessionCompat实现锁屏界面进行音乐播放控制功能
package com.yobbom.jiheboxplayer.service;import android.os.Build;import android.support.v4.media.MediaMetadataCompat;import android.support.v4.media.session.MediaSessionCompat;import android.support.v4.media.session.PlaybackStateCompat;import com.yobbom.jiheboxplayer.model.Music;/** * Created by Administrator on 2019/4/3. */public class MediaSessionManager { private static final String TAG = "MediaSessionManager"; private static final long MEDIA_SESSION_ACTIONS = PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_PAUSE | PlaybackStateCompat.ACTION_PLAY_PAUSE | PlaybackStateCompat.ACTION_SKIP_TO_NEXT | PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS | PlaybackStateCompat.ACTION_STOP | PlaybackStateCompat.ACTION_SEEK_TO; private PlayService playService; private MediaSessionCompat mediaSession; public static MediaSessionManager get(){ return SingletonHolder.instance; } private static class SingletonHolder{ private static MediaSessionManager instance = new MediaSessionManager(); } private MediaSessionManager(){ } //音乐的控制逻辑都在PlayService服务中,将service实例传递过来,与MediaSessionManager进行交互 private void init(PlayService playService){ this.playService = playService; setupMediaSession(); } private void setupMediaSession(){ mediaSession = new MediaSessionCompat(playService, TAG); //指明支持的按键信息类型 mediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS | MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS); mediaSession.setCallback(callback);//设置监听回调 mediaSession.setActive(true);//必须设置为true,这样才能开始接收各种信息 } //点击控制按钮时,更新播放状态 public void updatePlaybackState(){ int state = (AudioPlayer.get().isPlaying() || AudioPlayer.get().isPreparing()) ? PlaybackStateCompat.STATE_PLAYING : PlaybackStateCompat.STATE_PAUSED; //第三个参数必须为1,否则锁屏上面显示的时长会有问题 mediaSession.setPlaybackState( //监听的事件(播放,暂停,上一曲,下一曲) new PlaybackStateCompat.Builder() .setActions(MEDIA_SESSION_ACTIONS) .setState(state, AudioPlayer.get().getAudioPosition(), 1) .build()); } //播放歌曲时,需要更新屏幕上的歌曲信息 public void updateMetaData(Music music){ if(music == null){ mediaSession.setMetadata(null); return; } //Log.d(TAG, "parseMp3File名称: " + mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE)); //Log.d(TAG, "parseMp3File专辑: " + mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM)); //Log.d(TAG, "parseMp3File歌手: " + mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST)); //Log.d(TAG, "parseMp3File码率: " + mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE)); //Log.d(TAG, "parseMp3File时长: " + mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)); //Log.d(TAG, "parseMp3File类型: " + mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE)); MediaMetadataCompat.Builder metaData = new MediaMetadataCompat.Builder() .putString(MediaMetadataCompat.METADATA_KEY_TITLE, music.getTitle()) .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, music.getArtist()) .putString(MediaMetadataCompat.METADATA_KEY_ALBUM, music.getAlbum()) .putString(MediaMetadataCompat.METADATA_KEY_ALBUM_ARTIST, music.getArtist()) .putLong(MediaMetadataCompat.METADATA_KEY_DURATION, music.getDuration()) .putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, CoverLoader.get().loadThumb(music)); if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ metaData.putLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS, AppCache.get().getLocalMusicList().size()); } mediaSession.setMetadata(metaData.build()); } //初始化回调,用于监听锁屏界面上的按钮事件 private MediaSessionCompat.Callback callback = new MediaSessionCompat.Callback() { @Override public void onPlay() { AudioPlayer.get().playPause(); } @Override public void onPause() { AudioPlayer.get().playPause(); } @Override public void onSkipToNext() { AudioPlayer.get().next(); } @Override public void onSkipToPrevious() { AudioPlayer.get().prev(); } @Override public void onStop() { AudioPlayer.get().stopPlayer(); } @Override public void onSeekTo(long pos) { AudioPlayer.get().seekTo((int)pos); } };}以上是"Android如何实现原生锁屏页面音乐控制"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
控制
音乐
内容
监听
页面
信息
篇文章
类型
事件
按钮
按键
时长
歌曲
版本
界面
系统
学习
帮助
支持
更新
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络技术副总经理岗位职责
远程控制网络安全策略
2019网络安全案例分析
联通公司网络技术岗
宁波网络技术支持有哪些
网络安全漏洞怎么分
国家安全教育日网络安全例文
护苗青少年网络安全教学视频
长航公安局安庆分局网络安全
中植软件开发
全国网络安全产业
南阳驾驶网络安全教育平台
大庆服务器租用
数据库用户连接命令
路由器连服务器指令
数据库查看登录sa密码
word文管理服务器
原油交易的好软件开发
数据库中怎么调整对象大小
腾讯网络安全团队刘现磊
单机版游戏需要搭建服务器吗
杨浦区标准网络技术服务参考价格
数据库连接池设置
net添加数据库
陕西小桔网络技术有限公司
软件开发企业软件租赁税率
光明区口碑好的网络技术代理价钱
数据库安装版下载
网络技术部门是做什么的
百度下载东西服务器出错