问题标签 [mediabrowserservice]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
593 浏览

java - MediaBrowserService 在哪里获取 onLoadChildren 中的媒体文件

我正在尝试制作 MediaBrowserService。过去,当我想在设备上实际显示所有音乐文件时,我会使用 ContentResolver 并从 MediaStore 加载光标。

我不知道我应该在 MediaBrowserService 中的哪个位置执行此操作。

有方法:onLoadChildren

我找到的示例如下所示:

我的问题是,我是否在此方法中使用 ContentResolver 光标来返回 MediaItems 列表?或者是否有其他内部方法可用于通过设备获取所有音乐文件?我在网上看到的唯一示例是执行 HTTP 调用以获取歌曲列表的流服务,或者它们只是硬编码假歌曲以显示以供测试。我正在尝试允许该服务浏览设备本身上的音乐文件。

0 投票
1 回答
1569 浏览

android - MediaBrowser 未连接到 MediaBrowserService

我正在尝试使用 MediaBrowser 从活动连接到 MediaBrowserService。但是,我的onConnected回调似乎从未被调用来允许我设置MediaController并开始操作播放。

在我的播放器/浏览器活动中:

我已经用调试器添加了断点,似乎执行确实到达了服务,直到它的onCreate方法结束,但执行似乎永远不会到达我的连接回调的onConnectedoronConnectionFailed方法。connect调用后,checkedisConnected返回 false。

我不确定如何进一步调试,因为问题发生在连接过程中的某个地方,并且据我所知,我的代码符合 Android 示例指南。setSessionToken是的,我正在调用onCreate浏览器服务。

如果我尝试在我的活动中设置 MediaController onStart,在我调用之后connect,我会收到一个异常,指出浏览器未连接,因此无法设置会话令牌。因此,尽管执行进入onCreate我的服务,但连接没有完成。

0 投票
1 回答
257 浏览

android - 如何使用 Android 的 MediaBrowserService 服务 MediaStore 歌曲?

在 MediaBrowserService 的“onLoadChildren”方法中,我们必须返回一个 MediaItems 列表,以便客户端相应地构建它的 UI。如果在我的服务中我有一个刚刚从 MediaStore 获取的游标,或者我刚刚从房间数据库中获取的 LiveData 实例,我将如何处理它?

我不明白如何将我的光标/实时数据转换为媒体项目列表(当然不迭代所有光标/LiveData 数据),或者客户端如何知道何时需要从服务中获取更多数据?

谢谢

0 投票
1 回答
1349 浏览

android - MediaStyleNotification:播放/暂停按钮不响应点击

在我的应用程序中,当用户选择要播放的音频文件时,当文件准备好并且播放开始时,MediaStyle 通知会成功显示。

元数据信息已更新,标题、图标等。但是……</p>

在此处输入图像描述

我不知道我错过了什么。你可以看看我的MediaBrowserService类。

0 投票
1 回答
918 浏览

java - 将媒体项添加到 MediaBrowserService

我正在为 Android 构建一个音乐播放器,使用这两个示例(Android MediaBrowserService SampleUniversal Music Player)作为示例。我注意到在启动时加载媒体信息并将其添加到媒体浏览器。两者都在启动时提供完整的媒体列表。

但是如果我想动态地将媒体添加到播放器队列中呢?

例如,我使用Spotify 的 Web API根据用户的查询检索曲目列表。除其他外,它还返回一个指向 30 秒预览曲目的链接。据我了解,我需要创建一个包含此轨道的 MediaMetadata 对象。

但是,我应该如何将此信息添加到 MediaBrowserService?期望的行为是,当用户单击列表(RecyclerView)中曲目之一的播放按钮时,仅播放该曲目。另外,我没有使用浏览组件来表示内容层次结构。

我该如何实现这种行为?我应该阅读哪些参考资料?

提前致谢。

0 投票
2 回答
1122 浏览

android - onLoadChildren 必须调用 detach()、MusicBrowserService、Android?

我正在使用 MediaBrowserService 在设备上播放音频。当我打开蓝牙并播放音频时,应用程序崩溃了。

以下是日志

如何处理?

0 投票
1 回答
239 浏览

android - Android Auto 卡在错误状态,如何解除?

我正在扩展我的音频流应用程序以与 Android Auto 一起使用,我已经实现了一个MediaBrowserService并且一切运行良好。如果在播放过程中流返回错误,我会更新MediaSession适当地传递PlaybackStateCompat.STATE_ERROR. 在这种情况下,Android Auto 在屏幕上显示错误,但我看不到任何消除错误的方法。如果我导航回 Android Auto 中的应用程序菜单,我可以看到它向我Service发出收集请求,MediaItems但错误消息仍保留在屏幕上。

恢复的唯一方法是退出 Android Auto 然后重新打开它,然后错误消失并且MediaItems再次可见以浏览和播放。

我是否需要以MediaSession某种方式更新以消除错误状态,或者是否应该有一种方法可以消除屏幕上的错误消息?

作为参考,我正在手机上使用 Android Auto 应用程序来测试它。

谢谢

0 投票
0 回答
227 浏览

android - 如何在活动中从 MediaBrowserServiceCompat 访问 exoplayer 实例?

我使用 exoplayer 播放来自本地文件的音频MediaBrowserServiceCompat。我阅读了有关 exoplayer ui 的信息,并想在我的活动中使用它。如何在我的活动中获取 exoplayer 的实例,以便我可以调用该方法playbackcontrolview.setplayer(exoplayer)将其与 exoplayer ui 绑定?

我已经尝试过IBinder像普通服务一样使用,但它会引发错误。

我想将活动中的 exoplayer ui 绑定到MediaBrowserServiceCompat.

0 投票
1 回答
433 浏览

android - Android Auto:通过传递额外选项包对 MediaBrowserService 进行分页失败

最近,我一直在尝试在我的应用程序的 Android Auto 部分实现分页。为此,我从这篇Medium 帖子中获得了灵感。这个问题也有关系。但是,我仍然卡住了:虽然我可以让 Medium 帖子中的代码在常规应用程序上运行,但 Android Auto 集成并不能很好地工作。

长话短说,帖子中使用的技术是订阅 MediaBrowser 并传递分页意图。然后,调用带有 options 参数的 onLoadChildren 方法:

这适用于常规应用程序。但是,当从 Android Auto 调用应用程序时,会调用不带 options 参数的常规方法:

因此,无法对 Android Auto 的结果进行分页。

我对这个项目做了一些实验,这是一个非常基本的样板,用于展示 MediaBrowser 和 MediaBrowserService 如何工作。我应用了以下补丁:

我观察到以下情况:

正常启动应用程序时会调用带有选项 Bundle 的新 onLoadChildren 方法。有趣的是,Android Auto 在启动时会调用 MusicPlayerActivity,并且每次都会调用 connect(),所以我肯定需要保留对 connect() 的调用。这很重要,因为这意味着我们不必像之前想的那样尝试获取 Android Auto 使用的 MediaBrowser 实例。

打开应用程序时,它是这样的:

  1. 调用connect()
  2. 使用选项调用 onConnected 回调和 mMediaBrowser.subscribe(...)
  3. 使用选项调用 onLoadChildren
  4. 从那时起,使用选项对 onLoadChildren 进行进一步调用

打开 Android Auto 时,它是这样的:

  1. 调用connect()
  2. 不带选项调用 onLoadChildren
  3. 使用选项调用 onConnected 回调和 mMediaBrowser.subscribe(...)
  4. 使用选项调用 onLoadChildren
  5. 从那时起,在 Android Auto 中点击耳机时,只会调用不带选项的 onLoadChildren

因此,我不确定下一步该做什么。有什么我可以做的吗,或者它可能是一个 Android Auto 错误?

谢谢!

0 投票
0 回答
138 浏览

android - 在 MediaBrowserService.onLoadChildren 中,何时/如何提供选项包?

MediaServiceBrowserorMediaServiceBrowserCompat中,有两种方法:

public abstract void onLoadChildren (String parentId, Result<List<MediaBrowser.MediaItem>> result)

public void onLoadChildren (String parentId, Result<List<MediaBrowser.MediaItem>> result, Bundle options)

options被描述为:

Bundle:从媒体浏览器发送的服务特定参数的包。通过结果返回的信息应该受到这个bundle的内容的影响。此值绝不能为空。

我希望在(正在加载孩子的那个)中提供额外的东西MediaDescriptionCompatMediaItem在第二次调用中浮出水面。

然而,只有第一个方法被调用,正如在 Android Auto 下测试的那样。

我需要怎么做才能被调用options