问题标签 [android-mediasession]

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

android - 如何处理某些特定蓝牙耳机的媒体按钮事件

我正在实现媒体按钮服务来处理耳机(蓝牙或有线)的媒体按钮事件,对于某些特定耳机(例如:BOSE QC35、APPLE airpods),该服务无法检测到第一次点击的事件按钮,但可以检测它的下一次点击。

例如:

假设我想在单击 BOSE QC35/AirPods 的媒体按钮后结束互联网通话,单击媒体按钮后通话不会结束,而是将通话路由到手机(我也可以在 QC35 上听到“通话结束”的声音点),当我再次单击媒体按钮时,通话将结束。

对于同样的实现,如果我使用 Monster powerbeats2 或任何有线耳机,通话将在第一次点击后结束

这是代码:

0 投票
3 回答
2422 浏览

android - 刷新 MediaBrowserService 订阅内容

TL;DR:我已成功创建并(通过订阅)将活动耦合到媒体浏览器服务。此媒体浏览器服务可以继续运行并在后台播放音乐。我希望能够在某个阶段刷新内容,无论是在应用程序再次进入前台时还是在 SwipeRefreshLayout 事件期间。

我想实现以下功能:

  1. 启动 MediaBrowserServiceCompat 服务。
  2. 从活动中,连接并订阅媒体浏览器服务。
  3. 允许该服务在应用关闭时继续运行和播放音乐。
  4. 在稍后阶段,或在 SwipeRefreshLayout 事件中,重新连接并订阅服务以获取新鲜内容。

我收到的问题是在 MediaBrowserService 中(在创建订阅后)您只能从 onLoadChildren() 方法调用一次 sendResult() ,因此下次尝试使用相同的根订阅媒体浏览器服务时,第二次调用 sendResult() 时会出现以下异常:

我调用以下方法来连接和断开媒体浏览器(同样,在第一次连接时一切运行顺利,但在第二次连接时,我不确定如何通过订阅刷新内容):

我在 onPause() 而不是 onDestroy() 中取消订阅并断开连接,以便即使活动保留在后台堆栈上也会重新创建订阅。

分别在活动和服务中用于滑动刷新的实际方法:

活动

服务

其他研究:

我参考了 Github 上的 Google Samples 代码,以及...

在创建媒体浏览器服务并且活动至少订阅一次后,上述存储库似乎都没有处理刷新内容的问题 - 我想避免重新启动服务,以便音乐可以在后台继续播放。

可能的相关问题:

0 投票
0 回答
889 浏览

android - 无法设置 MediaControllerCompat.TransportControls

我正在尝试在通知按钮中设置 onclick 侦听器,但是当我按下按钮时,我收到如下错误:

但早些时候它工作正常,这是错误中显示的方法。

任何我做错的建议都会有所帮助。我把这个方法称为view.setOnClickPendingIntent(R.id.btnPause, playbackAction(1)); 。我试图让它在锁屏中工作,这就是为什么我将通知更改为前台,因为之前我覆盖了onbackbutton,希望有人能提前帮助我。

0 投票
2 回答
4639 浏览

android - 如何为 ExoPlayer v2.5+ 使用 MediaSession 扩展

我想将 MediaSession 与 exoplayer 一起使用,通过搜索我发现 Exoplayer 已经有 MediaSession 扩展库(https://github.com/google/ExoPlayer/tree/release-v2/extensions/mediasession),但我找不到任何关于如何实现它的好文档。

我已经阅读了谷歌开发人员提供的文档,但对我来说不清楚且难以理解,文档链接是https://medium.com/google-exoplayer/the-mediasession-extension-for-exoplayer- 82b9619deb2d

谁能帮助我如何使用 Exoplayer 实现 MediaSession 扩展。

编辑:

最后,我能够通过使用上面的链接( https://medium.com/google-exoplayer/the-mediasession-extension-for-exoplayer-82b9619deb2d)努力实现这一点。

详细信息在下面的答案部分中给出。

0 投票
3 回答
2449 浏览

android - onMetadataChanged MediaControllerCompat.Callback 从未调用

我正在为广播电台开发一个简单的音频播放器应用程序。
我已成功创建MediaBrowser并注册了一个回调来监听playBack- 或metadata更改。

playback打电话时收到更改

但是元数据更改不是。
即使我打电话

我缺少什么来接收元数据更改?
如果它可以帮助完整的存储库在Github上可用

提前致谢

0 投票
1 回答
499 浏览

android - 来自 MediaController 的 android ActiveSessions

如何通过媒体控制器(android.media.session.MediaController)恢复用户活动的所有(或几乎)会话数据。至少 Youtube 和 GP Music?

我无法从媒体控制器获取 GPMusic(空)的未决意图。来自 Youtube 的 Intent 只能恢复主屏幕(我想恢复视频和位置)

0 投票
0 回答
120 浏览

android - 如何显示摩托罗拉锁屏媒体控件

当媒体在我的应用控制的远程设备上播放时,我的应用会收到通知。在大多数设备上,通知(不使用MediaStyle通知)在锁定屏幕上显示得很好,但我猜在摩托罗拉手机上它不会。我的用户说大多数媒体应用程序会在屏幕上显示一些控件,但不会显示通知。

如何确保我的应用显示这些控件?我没有要测试的摩托罗拉手机。

我已经在创建MediaSessionCompat,例如在 Android Wear 上,我可以很好地看到我的控件,而无需任何额外的代码。

编辑:添加一些代码。

媒体会话:

和通知:

0 投票
1 回答
5624 浏览

android - 将 exoplayer 与 MediaSessionCompat 连接

我想将我的 exoplayer 实现与媒体会话对象连接起来。我设置了一个 SimpleExoPlayerView 来显示视频。每次单击按钮时,我都希望触发媒体会话回调。我只能在使用耳机之类的东西时触发回调。应用程序中使用的代码如下所示

对代码做了一些改动

如何获取 SimpleExoPlayerView 中显示的按钮来触发媒体会话回调?

0 投票
1 回答
538 浏览

java - MediaSession 完成广播()异常

关于这个异常的原因的任何想法?

01-10 15:33:43.111 21717-21717/com.music.ofek.iplay E/AndroidRuntime: 致命异常: 主进程: com.music.ofek.iplay, PID: 21717 java.lang.IllegalStateException: finishBroadcast() 调用在 android.support.v4.media.session.MediaSessionCompat$MediaSessionImplApi21.setPlaybackState(MediaSessionCompat.java:3226) 在 android.support.v4.media 的 android.os.RemoteCallbackList.finishBroadcast(RemoteCallbackList.java:292) 广播之外.session.MediaSessionCompat。setPlaybackState(MediaSessionCompat.java:608) 在 com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector.updateMediaSessionPlaybackState(MediaSessionConnector.java:521) 在 com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector.access$400(MediaSessionConnector .java:69) 在 com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector$ExoPlayerEventListener.onPlayerStateChanged(MediaSessionConnector.java:652) 在 com.google.android.exoplayer2.ExoPlayerImpl.handleEvent(ExoPlayerImpl.java:第 462 章148) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:第726章)

0 投票
1 回答
1189 浏览

android - MediaControllerCompat 获取状态不返回当前位置

在我的代码中

状态中的getPosition()始终是我在MediaSessionCompat.Callback onPlayonPause方法中设置的那个。

我想知道如何设置MediaSessionCompat对象的状态,以便媒体控制器getPlaybackState()返回最新位置?