android开发分享Android实现原生锁屏页面音乐控制

android5.0 提出了全新的mediasession概念用于播放器与控制器之间进行交互,它取代之前的remotecontrolclient,并提供了更为灵活的客户端受控端模型。

android5.0 提出了全新的mediasession概念用于播放器与控制器之间进行交互,它取代之前的remotecontrolclient,并提供了更为灵活的客户端受控端模型。

但是mediasession框架只能在安卓5系统上使用,如何兼容低版本呢? google在support-v4(21以上版本)中也提供了mediasessioncompact兼容包。通过它可以告诉android系统与其他的应用,自己正在播放的内容是什么以及自己支持哪些类型的播放控制。

在播放音乐时,通过mediasessioncompat可以实现锁屏按键上的监听,从而转换成自己的操作。

android开发分享Android实现原生锁屏页面音乐控制介绍的是基于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开发分享Android实现原生锁屏页面音乐控制的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/addevelopment/899842.html

(0)
上一篇 2021年10月23日
下一篇 2021年10月23日

精彩推荐