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

谷歌官方提供了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 onLoadChildren(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的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

  • 35
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
运动帮手app是一款基于Android平台设计与实现的运动健身辅助应用。该应用旨在帮助用户记录运动数据、制定健身计划、分享运动成果等,以提升用户的健康运动体验。 首先,运动帮手app的设计包括用户注册登录、个人信息设置、运动数据记录、健身计划制定、社交分享等功能。用户通过注册登录,可以记录个人身体数据、健身目标、运动习惯等信息,为更好地制定健身计划提供基础支持。在运动数据记录功能中,用户可以记录每日的运动情况,包括步数、时间、距离、消耗卡路里等信息,以便跟踪自己的运动进度。健身计划制定功能可以根据用户的身体状况和运动目标,为用户提供个性化的健身计划,帮助用户科学、有效地进行健身锻炼。此外,用户还可以通过社交分享功能,与好友分享自己的运动成果,并互相督促、鼓励。 其次,运动帮手app实现采用了Android开发技术,包括Java、Kotlin等编程语言,利用Android Studio等集成开发环境进行开发。在数据存储方面,利用SQLite数据库进行用户信息和运动数据的存储,保证数据的安全性和可靠性。在UI设计上,运动帮手app采用了简洁、直观的界面风格,让用户能够快速找到所需功能和信息。 总之,基于Android平台的运动帮手app设计与实现,旨在帮助用户更好地进行健身运动,记录运动数据,制定健身计划,分享运动成果,提升用户的健康运动体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值