Android如何实现原生锁屏页面音乐控制
发表于:2024-10-20 作者:千家信息网编辑
千家信息网最后更新 2024年10月20日,这篇文章主要为大家展示了"Android如何实现原生锁屏页面音乐控制",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Android如何实现原生锁屏页面音乐控
千家信息网最后更新 2024年10月20日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安全错误
数据库的锁怎样保障安全
弋江网络安全考试scse培训
数据库开发需要技能
网络安全为什么那么难
杨浦区户外led大屏服务器
网络技术信息检索报告
网络技术 职位 英文
网络技术就业分析报告
服务器jar管理
四川浪潮服务器虚拟化部署
计算机三级的网络技术的体型
中国期刊数据库 查询
测试系统服务器时间如何修改
镜像服务器设置
华为服务器断电后开机键
网络安全宣传创意画
mc生存服务器网易版咋刷物资
网络技术挑战赛路演
我的世界服务器密码有什么用
易语言协议软件开发
做软件开发游戏本好吗
数据存储服务器是什么
软件开发费 会议费
盈环网络技术有限公司跟美团
百猫搜网络技术怎么样
国家互联网科技巨头
通过网站找到数据库密码
小数据库软件
微信发视频无法连接服务器怎么办
湖北系统软件开发靠谱吗
运行导出数据到数据库