问题标签 [mediabrowserservicecompat]

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 投票
0 回答
328 浏览

android - Android MediaBrowserService:onLoadChildren 为 id null 发送了 null 列表

MediaBrowserServiceCompat用来支持Android Auto

从崩溃报告(我在这个问题的底部添加了其中一个)我看到onLoadChildren我覆盖的方法存在问题。

我这样做:

因为在文档中它说如果parentId无效,请sendResult使用null. 它正在崩溃,但它应该根据文档执行此操作,而不是崩溃:

“当给定的 parentId 无效时,实现必须调用带有 null 的 result.sendResult,这将调用 MediaBrowserCompat.SubscriptionCallback.onError。”

另一方面,文档还提到了以下内容parentId

parentId: String: 要查询其子项的父媒体项的 id。此值绝不能为空。

( https://developer.android.com/reference/android/service/media/MediaBrowserService.html#onLoadChildren(java.lang.String,%20android.service.media.MediaBrowserService.Result%3Cjava.util.List%3Candroid. media.browse.MediaBrowser.MediaItem%3E%3E) )

所以,我的问题来了:

1)如何(以及为什么)parentId设置为,null而文档说它不能是null。我无法控制这一点,因为系统调用onLoadChildrennull parentId

2)为什么它会崩溃而不是MediaBrowserCompat.SubscriptionCallback.onError.像文档所述那样调用?

其中一份崩溃报告:

0 投票
1 回答
725 浏览

android - MediaControllerCompat 的 getMetadata 返回 null

我正在尝试使用视频作为指南在 Android 中制作音频应用程序,但在使用音频元数据创建通知时遇到问题。

这是我用来从设备中提取音频文件的代码:

这是我的 MediaBrowserService 的 onLoadChildren 代码:

最后,抛出错误的代码(我在创建 MediaSession 和 setActive(true) 后调用 createNotifcation()):

如果我理解正确,我相信这就是与此问题相关的所有代码。关于我可以忽略什么的任何想法?

0 投票
1 回答
233 浏览

android - MediaBrowserServiceCompat 的 onGetroot() 方法的返回类型?

第一个参数是inBrowserRoot()的返回类型是什么。onGetroot()MediaBrowserServiceCompat

它的第一个参数是rootId哪个是字符串,那么我要传递专辑的路径吗?我如何获得它的价值?如何返回不为 null 的内容层次结构?

任何帮助表示赞赏。

0 投票
2 回答
566 浏览

android - 从 MediaBrowserService 获取正在播放的项目

我有一个Activity包含项目列表的家庭音频应用程序。用户选择一个项目,我将一个 ID 传递给另一个Activity具有控件(播放/暂停/音量等)的项目。音频播放以MediaBrowserService. 我需要检测用户选择的项目当前是否正在播放,但我无法弄清楚如何将 ID 保存在本地存储(SharedPrefs 或 SQlite)中。

我将项目的 ID 从第二个Activity传递到MediaBrowserServicea Bundle。我以为我可以在第二次Activity使用时检索 ID,getExtras()但它总是返回 0 或 null,具体取决于我使用的代码(见下文)。

我不反对使用本地存储,但似乎应该有更好的方法。这是我到目前为止所拥有的:

0 投票
0 回答
81 浏览

android - 当应用程序具有 MediaBrowserService 时,Videoview 窃取媒体按钮事件

我正在使用 aVideoview在循环中播放动画视频。我注意到,每当视频播放时,如果任何其他音乐应用正在播放音频并且我点击headset buttons(pause/play),媒体按钮事件都不会发送到音乐播放应用。相反,它被分派到 my ExampleServicewhich extends from MediaBrowserServiceCompatVideoview正在窃取那些媒体按钮事件。我正在使用偶数AudioManager.AUDIO_FOCUS_NONE

我注意到当我的应用程序打开并播放视频时,我可以在堆栈跟踪中看到一个日志

D/MediaSessionService: Media button session is changed to com.example.mediasessiontest/ExampleService (userId=0)

有没有办法在不请求Mediabutton事件的情况下播放视频?

  1. 如果我不在我的应用中播放视频,耳机事件会正确路由到正在播放音乐的应用
  2. 这仅发生在Android 8 and 9. 工作正常Android 10
  3. 甚至尝试Surfaceview播放Mediaplayer视频。但观察到同样的问题。

    也尝试使用Surfaceviewwith Mediaplayer。但同样的结果。看起来像操作系统中的错误8 and 9

0 投票
0 回答
804 浏览

android - MediaButtonReceiver 不与 MediaSession 一起使用

我正在尝试从有线/蓝牙耳机接收媒体按钮事件

我在 MediaSessionCallback 的 onMediaButtonEvent(mediaButtonEvent: Intent?) 方法上接收媒体按钮事件,但音乐播放没有任何反应。

这是我的 MediaPlayerService

这是我的清单

看起来我错过了一些东西,经过多天的挣扎,我找不到问题所在。任何帮助将不胜感激谢谢

0 投票
0 回答
159 浏览

java - 打盹模式时保持流媒体服务在 MediaBrowserService 上运行

我正在根据这篇很棒的文章https://medium.com/androiddevelopers/mediabrowserservicecompat-and-the-modern-media-playback-app-7959a5196d90使用 MediaBrowserServiceCompat 开发 Android 流媒体应用程序。我的应用程序运行良好,除非手机进入打盹模式。我一直在寻找互联网,并看到一些可能的解决方案来保持我的服务活力。其中之一是在不同的进程中运行 UI 和音乐服务。但是,由于我使用的是 MediaBrowserService,我不知道如何使用 AIDL 从 UI 启动服务。

这就是我在同一进程中将服务与 Main Activity 连接起来的方式:

MainActivity.java

MediaBrowserHelper.java

任何人都知道如何做到这一点,或者是否有任何其他可靠的解决方案来保持流媒体的活力?

谢谢

0 投票
1 回答
1895 浏览

android - Android:NotificationCompat.MediaStyle 操作按钮不执行任何操作

我有一个简单的 Android 应用程序,其中包含一个Activity和一个Service派生自MediaBrowserServiceCompat. 我已经成功地将它设置为通过使用MediaBrowserCompat和播放我的主要活动中的音频MediaControllerCompat。它甚至可以播放和暂停我的蓝牙耳机的音频。都好。

我的挑战涉及NotificationCompat.MediaStyle出现在锁定屏幕和通知托盘中的通知。通知正确显示。addAction()但是,当我使用and添加按钮时MediaButtonReceiver.buildMediaButtonPendingIntent,它们什么都不做。如果我改为添加一个虚拟 PendingIntent 来启动我的主要活动,那效果很好。

这是我生成通知的代码(抱歉,这是在 Xamarin 中运行的 C#,因此大小写和名称将与您的预期略有不同)。这是在我的服务类里面。

到目前为止,这是我试图解决这个问题的方法:

  • 当我开始播放时,我使用MediaSession.setActive(true)
  • 每次开始和停止播放时,我都会在PlaybackStateCompat
  • 我正确设置了会话令牌。
  • 我的清单中没有设置MediaButtonReceiver任何东西,也没有设置任何东西来处理android.intent.action.MEDIA_BUTTON,因为我的目标是 Android 5.0 及更高版本并使用这些*Compat类,我的理解是不再需要。

我知道媒体按钮事件正在正确路由到我的应用程序,因为我的蓝牙耳机按钮工作。我在我的车上试过,它也在那里工作。只是通知中的按钮不起作用。我期待他们生成对MediaSessionCompat.Callback. 这是不正确的吗?我在这里做错了什么?

我将不胜感激任何指示。


更新: 我让它工作了。我需要<application>在清单的节点中添加以下内容:

...以及实现的服务节点内的以下内容MediaBrowserServiceCompat

我仍然有点困惑为什么这是必要的,因为我的蓝牙耳机和汽车信息娱乐系统的按钮按下都很好地路由到了应用程序。更重要的是,谷歌

MediaBrowserServiceCompat如果您的应用程序中 已经有一个,默认情况下MediaButtonReceiver会将接收到的关键事件传递给 MediaBrowserServiceCompat。你可以在你的 MediaSessionCompat.Callback.

他们将此作为选项“服务处理 ACTION_MEDIA_BUTTON”的替代方案,所以我认为这意味着我不需要对清单做更多的事情。如果有人可以在这里启发我,我将不胜感激。

但是,对于它的价值,这对我有用。

0 投票
1 回答
914 浏览

android - 带有 ExoPlayer 和 PlayerControlView 的 MediaBrowserService - 如何从 UI (PlayerControlView) 访问播放器实例?

我目前正在开发具有视频和音频功能的应用程序的一部分,并且最近开始重构代码库。目标是集成MediaSession/ MediaControllerMediaBrowserService/ MediaBrowser框架。

我们对视频和音频组件使用ExoPlayerPlayerControlView具体的PlayerView,它需要对播放器实例的引用PlayerControlView

但是,根据android 开发人员的帖子和 的文档MediaBrowserService播放器实例应该包含在服务下。此外,客户端站点(MediaBrowser 和 MediaController)通过connect()方法和MediaBrowserConnectionCallback与之交谈的唯一方法,这使得将播放器的实例传递给 PlayerControlView(或其他方式)是不可能的。

我尝试使用各种回调,例如MediaSessionCompat.Callback,但SimpleExoPlayerPlayerControlView都不是 Parcelable。

在传统的服务中,我们Binder用来访问我们在服务中声明的方法并执行以下操作:

MediaBrowserService/ MediaBrowser但是,这对于框架来说似乎是不可能的。我检查了这个问题的答案,这表明使用 [sendCommand] 是一种调用自定义方法的方式。但它也要求参数是 Parcelable 的。

总而言之,我的问题是,有没有办法在框架下PlayerControlView访问实例SimpleExoPlayer或其他方式。MediaBrowserService

非常感谢您的任何回答或评论。

0 投票
2 回答
942 浏览

android - 无法使用 MediaBrowserServiceCompat

我是android开发的新手。我想创建一个以客户端-服务器方式运行的音乐播放器。我现在正在尝试创建服务器部分。我发现我可以使用这里MediaBrowserServiceCompat官方文档中的说明来实现这一点。但是当我尝试在我的项目中使用它时,它说 虽然我已将 Android Studio 设置为自动导入所需的库,但我尝试显式地导入, ,希望它可以工作,但事实证明它没有。因此,我前往UAMP(通用 Android 音乐播放器)的 GitHub 存储库寻求帮助。我在这个文件中找到了语句。但我找不到任何这样命名的库Unresolved reference: MediaBrowserServiceCompat 看这里android.support.v4.*android.support.*androidx.*import androidx.media.MediaBrowserServiceCompat看这里

为什么我的清单说MediaPlaybackService must extend android.app.service看这里

我应该如何使用它?谢谢!

编辑:我做了一些研究和修补。我尝试将 Manifest 中的服务名称和关联的类名称更改为MyMediaBrowserServiceCompat神奇地起作用(有点)。所以现在,我的问题是,这是正常行为吗?更改服务名称真的会影响这种情况吗?如果是这样,它究竟如何在其他人的机器上使用不同的名称(与类名本身不相似)?其次,现在我的代码说There's a cycle in the inheritance hierarchy for this type看这里我在网上搜索并找到了这个。所以我知道那条消息是什么意思,但我不知道在这种情况下如何解决它。我的清单仍然说同样的:MyMediaBrowserServiceCompat must extend android.app.service看这里