首页 > 其他分享 >Android基于MediaBroswerService的App实现概述,android零基础入门

Android基于MediaBroswerService的App实现概述,android零基础入门

时间:2024-03-28 18:31:54浏览次数:27  
标签:MediaBroswerService 连接 App public Override new Android void

谷歌官方提供了MediaBroswerService,通过其可以帮助我们实现上述的需求。

MediaBroswerService
  • Android多媒体架构

Android多媒体播放采用client,server架构,一个server可以对应多个client,client在使用的时候需要先连接到server,双方通过设置的一些callback来进行状态的同步。

image.png

使用MediaBrowserService播放

image.png

客户端需要创建MediaBrowser,服务端需要实现MediaBrowserService,在建立连接后,两端之间的交互主要通过MediaController和MediaSession。两个类之间通过预先定义的callback进行交互,MediaSession控制着播放器的播放,MediaController来控制着UI的变化。

image.png

  • Media session

一个session持有了播放器的状态和关于正在播放的一些信息,一个seesion可以接收来自一个或多个媒体播放器的callback。这使得通过其它设备来控制成为可能。

  • Media controller

我们的UI只是和Media controller交互,而不是Player 本身,Media controller会将一些控制信息传递给Media Session,它也会在seesion发生变化的时候,得到来自session的回调,一个media controller一次只可以连接一个session。当使用一个media contoller和Session的时候,我们可以在运行期部署多个播放器,在其执行的时候根据设备去修改app的外观。

使用MediaBrowserService可以让Android Wear, Auto非常容易找我们的App,连接它,浏览它的内容,控制其播放,而完全不需要接触我们的UI Activity。

服务端实现

  • 服务端基础配置

mainfeat 配置

MediaPlaybackService的初始化

public class MediaPlaybackService extends MediaBrowserServiceCompat {

@Override

public void onCreate() {

super.onCreate();

// 1. 初始化 MediaSession
mSession = new MediaSessionCompat(this, “MusicService”);

// 2. 设置 MedisSessionCallback
mSession.setCallback(mSessionCallback);

// 3. 开启 MediaButton 和 TransportControls 的支持
mSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS |
MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);

// 4. 初始化 PlaybackState
mStateBuilder = new PlaybackStateCompat.Builder()
.setActions(
PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_PLAY_PAUSE);
mSession.setPlaybackState(mStateBuilder.build());

// 5. 关联 SessionToken
setSessionToken(mSession.getSessionToken());
}
}

根据包名做权限判断之后,返回根路径

@Override

public BrowserRoot onGetRoot(String clientPackageName, int clientUid, Bundle rootHints) {

// 根据包名对每个访问端做一些访问权限判断等

}

用来根据mediaID来返回第三放App所需要获得媒体数据

@Override

public void onl oadChildren(final String parentMediaId,

final Result<List> result) {

// 根据parentMediaId返回播放列表相关信息

}

客户端连接

private void initMediaBrowser() {

//1.待连接的服务

ComponentName componentName = new ComponentName(“com.example.android.uamp”,“com.example.android.uamp.MusicService”);

//2.创建MediaBrowser

mMediaBrowser = new MediaBrowserCompat(this, componentName, mConnectionCallbacks, null);

//3.建立连接

mMediaBrowser.connect();

}

设置相应的callback,连接Callback,数据变化Callback

连接状态同步

数据变化Callback设置

private final MediaBrowserCompat.ConnectionCallback mConnectionCallbacks =
new MediaBrowserCompat.ConnectionCallback() {

@Override
public void onConnected() {
//连接成功回调
}

@Override
public void onConnectionSuspended() {
//连接中断回调
}

@Override
public void onConnectionFailed() {
//连接失败回调
}
};

MediaControllerCompat.Callback controllerCallback =

new MediaControllerCompat.Callback() {
public void onSessionDestroyed() {
//Session销毁
}

@Override
public void onRepeatModeChanged(int repeatMode) {
//循环模式发生变化
}

@Override
public void onShuffleModeChanged(int shuffleMode) {
//随机模式发生变化
}

@Override
public void onMetadataChanged(MediaMetadataCompat metadata) {
//数据变化
}

@Override
public void onPlaybackStateChanged(PlaybackStateCompat state) {
//播放状态变化
}
};

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

以上分享【我的阿里P7移动开发架构师学习笔记】七大模块整套学习资料均免费分享,需要的小伙伴,我已经上传到石墨文档了,大家自取就可以了。白嫖可以,别忘了给我点个关注哈。

当然我也为你们整理好了百度、阿里、腾讯、字节跳动等等互联网超级大厂的历年面试真题集锦。这也是我这些年来养成的习惯,一定要学会把好的东西,归纳整理,然后系统的消化吸收,这样才能极大的提高学习效率和成长进阶。碎片、零散化的东西,我觉得最没有价值的。就好比你给我一张扑克牌,我只会觉得它是一张废纸,但如果你给我一副扑克牌,它便有了它的价值。这和我们收集资料就要收集那些系统化的,是一个道理。

如果你需要,我把他放在GitHub了,无偿分享的。

【Android架构视频+BATJ面试专题PDF+学习笔记】

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

【Android架构视频+BATJ面试专题PDF+学习笔记】

[外链图片转存中…(img-f1UqVXoO-1711349510198)]

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

标签:MediaBroswerService,连接,App,public,Override,new,Android,void
From: https://blog.csdn.net/qd520_1314/article/details/137014260

相关文章

  • Android启动优化、布局优化必经之路—如何精准获取页面绘制时间
    });}该方法实现比较简单,通过添加idleHandler的方式,发送一个任务,该任务只有在线程处于空闲的状态下会被调用方法二@OverrideprotectedvoidonResume(){super.onResume();finallongstart=System.currentTimeMillis();getWindow().getDecorView().post(newRun......
  • 不同操作系统中通用解决方案,浏览器拉起app或打开本机应用软件原理,前端网页如何打开一
    不同操作系统中通用解决方案,浏览器拉起app或打开本机应用软件原理,前端网页如何打开一个PC本地应用,通过Scheme、JavaScript、第三方库分别实现前端网页打开本地应用。设想一个场景,当我们在浏览一个网页并且需要下载某个资源时,你的电脑可能经常会跳出一个提示框,询问你是否需......
  • android编译方法
    参考资料:https://blog.csdn.net/u012514113/article/details/125514512 在编译Android源码时,开始一定会初始化系统环境变量,几条熟悉的命令:sourcebuild/envsetup.shlunchxxxmake 下面是具体作用:source:用于执行一个shell脚本文件,通常用于设置环境变量或者切换到......
  • C# Lambda Mapper
    场景在业务开发中,从仓储至应用,中间一般还有一层模型映射服务,其中的核心主键俺管他叫映射器(Mapper)。现在业界已经有很多Mapper的实现方案了,多为自实现如反射同名映射,或者使用大名鼎鼎的AutoMapper。AutoMapper底层是有一些优化的,比很多自实现的反射同名映射要快,反射会占用大量时......
  • uniapp小程序中onShareAppMessage(OBJECT)实现带参数的分享功能
    一、引言小程序中用户点击分享后,在js中定义onShareAppMessage处理函数(和onLoad等生命周期函数同级),设置该页面的分享信息。用户点击分享按钮的时候会调用。这个分享按钮可能是小程序右上角原生菜单自带的分享按钮,也可能是开发者在页面中放置的分享按钮(<buttonopen-ty......
  • KingbaseES LWLock buffer_mapping 等待
    在KingbaseES数据库中,会话在将数据块与共享缓冲池的缓冲区相关联时,会触发“LWLockbuffer_mapping”等待事件。这类事件涉及到一种轻量级锁(lwlock),类似于Oracle中的闩锁。这个锁在不同的数据库中可能有不同的名称,但通常被称为buffer_mapping或BufMappingLock。它主要用于实现对HAS......
  • Android程序员真的会被AI(Devin)所取代吗
    前言近日,世界上第一位AI程序员Devin诞生,号称能自主学习新技术,自己改Bug,甚至它已经成功通过一家AI公司面试。消息一出,震撼整个科技圈。不少从业者在社交媒体留言说,担心Devin这类AI程序员技术可能会让自己失去工作。一、Devin是什么?Devin是CognitionAI推出的全球首个......
  • Android 8.1 USB连接模式默认为MTP
    Android8.1USB连接模式默认为MTP最近收到项目需求,要求设备默认的USB连接模式为MTP,具体修改参照如下:/frameworks/base/services/usb/java/com/android/server/usb/UsbDeviceManager.javapublicvoidhandleMessage(Messagemsg){switch(msg.what){......
  • MappedByteBuffer VS FileChannel:从内核层面对比两者的性能差异
    本文基于Linux内核5.4版本进行讨论自上篇文章《从Linux内核角度探秘JDKMappedByteBuffer》发布之后,很多读者朋友私信我说,文章的信息量太大了,其中很多章节介绍的内容都是大家非常想要了解,并且是频繁被搜索的内容,所以根据读者朋友的建议,笔者决定将一些重要的章节内容独......
  • 陪玩系统源码、app、h5、小程序,三段交付、源码交付、支持二开、前后端搭建、uniapp
    【2.1最新补丁】2.1补丁已发布,增加内容 1、线下订单提交需要填写预约时间和预约地点2、申请入驻时需要选择线上和线下3、申请时需要同意政策,3个含未成年保护4、注册时需要同意政策3个含未成年保护5、后台添加线下陪玩分类。和线下标签6、后台审核申请陪陪显示线下还是......