问题标签 [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 投票
1 回答
935 浏览

android - MediaBrowserServiceCompat 中的 Service.startForeground()

我在 Android Dashboard 崩溃日志中收到此错误:

Context.startForegroundService() 没有调用 Service.startForeground() (没有可用的位置)

我知道 Oreo 中引入的背景限制,并已通读这篇文章

但是,对于运行 Android Wear 8.0 的一小部分用户,我仍然会遇到此错误。令人困惑的是,并非所有用户都在运行 8.0。

根据文档,如果您打电话,Context.startForgroundService()您必须startForeground()在 5 秒内通过调用服务来显示通知(我假设MediaBrowserCompat正在调用Context.startForgroundService())。

但是,如果我使用的是MediaBrowserServiceCompat. 当用户点击播放开始音频播放时,我会显示前台通知。

0 投票
1 回答
605 浏览

android - 将服务重新附加到活动?

当我第一次打开 Activity 时,它会创建一个 MediaBrowserService。当我尝试重新打开它时,我想重新连接到它。我尝试了多种方法:

当我尝试这样做时,它总是会带来错误消息:

即使我调用了onStop()函数,这怎么可能mMediaBrowser.disconnect()呢?或者这只是错误的方式?当我通过 BackButton 返回时,这一切都会发生。

我的完整代码:

//编辑如询问服务的代码:

0 投票
1 回答
1261 浏览

android - MediaControllerCompat 的 PlaybackState

我按照本指南使用 MediaSessionCompat 构建后台音频应用程序并遇到了问题。

在我的Activity中,我将我的 UI 连接到媒体控制器,如下所示

在我的Service,我建立我的会话如下

基本上,我已经逐行遵循网站的指南,除了我遗漏了Notification显示当前音频信息的内容。在我的设备上进行测试时,出现NullPointerException错误。

logcat 在尝试mediaControllerCompat.getPlaybackState().getState(). 我认为我MediaControllerCompat.getPlaybackState()的是null。甚至Android Devleopers SiteMediaControllerCompat似乎也无法解决我的问题。也许只是我,但在尝试检索其值之前,我没有看到任何定义MediaControllerCompat's 的代码。PlaybackState

我该如何解决这个问题?

提前感谢您的帮助。

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 回答
2872 浏览

android - MediaSession 没有从 MediaStyle 通知中获得任何回调

我创建了一个扩展 MediaBrowserServiceCompat 的服务。此服务包含对我的播放器的引用并创建一个带有回调的新 MediaSession。每次播放器更改状态时,我都会更新 MediaSession 的播放状态并创建一个 MediaStyle 通知。当我开始在播放器中播放某些内容时,会显示通知,但通知中的按钮不会触发 MediaSession 回调,它们不会执行任何操作。我在 MediaSession 中设置了正确的标志,我将会话设置为活动,我在播放状态下设置了正确的操作,我将会话令牌传递给通知,但仍然没有从中获得任何回调. 我真的不知道我做错了什么。所有这些代码都在我的应用程序导入的模块中。

我的 NotificationHelper 类:

我的服务类:

}

MediaBrowserHelper 初始化服务:

}

显现:

0 投票
1 回答
588 浏览

android - 前台 MediaBrowserService 在应用退出时被终止

我正在按照Android 指南在媒体播放器应用程序中使用 MediaBrowserServiceCompat,但该服务在应用程序退出时被销毁。

在应用程序启动服务正确创建。在按下按钮时mediaController.transportControls.play()调用,并在onPlay()调用我的会话回调类中的此方法之后。内部onPlay()服务已启动:(context.startService(Intent(context, MediaBrowserServiceCompat::class.java))也尝试startForegroundService过 Oreo 及更高版本)并设置为前台:this@PlaybackService.startForeground(SERVICE_ID, notificationBuilder?.build())。创建奥利奥和更高 API 的通知通道。

现在通知已启动,我可以通过发出命令看到服务在前台:

到目前为止一切正常,但是当我按下主页按钮时,我希望服务保持启动,而是调用onDestroy()我的MediaBrowserServiceCompat类的方法。返回应用程序并再次启动服务后,它没有设置为前台(也没有通知)。

startService在我的应用程序中使用了唯一的一个呼叫,并删除了每个呼叫stopSelfstopForeground测试。

在 API 28、26、22 和 18 上,我得到了相同的结果。

我也试过START_STICKYonStartCommand().

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

0 投票
2 回答
368 浏览

android - 单击项目时 MediaBrowserServiceCompat 接收空包

我正在尝试将媒体项目公开给其他可以通过我的MediaBrowserServiceCompat服务浏览我的应用程序内容的媒体应用程序。在我的onLoadChildren方法中,我正在构建 MediaBrowserCompat.MediaItem一个MediaDescriptionCompat包含一个Bundle我需要播放该项目的额外内容的 a。

因此,在onPlayFromMediaId(String mediaId, Bundle extras)用户单击该项目时我得到的回调中,我得到了正确mediaId的结果,但它extras是一个空包。

我确信 MediaItem 在Result<List<MediaBrowserCompat.MediaItem>>结果中发送时具有附加包,onLoadChildren但我不确定为什么它被返回为空。什么会导致这样的问题?

谢谢!