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

android - 如何使用 MediaControllerCompat 控制当前播放器?

我的应用程序不是媒体播放器。我只想能够使用新的MediaControllerCompat类来控制当前的媒体播放器。目前我正在使用MediaSessionManager但想升级到新的兼容类。

当我没有令牌或 MediaSessionCompat 来实例化 MediaControllerCompat 类时,如何实例化它?我希望得到一些示例代码。

0 投票
1 回答
547 浏览

android - Android Chromecast:投射本地音频文件失败

我正在尝试将本地设备音频文件投射到 Chromecast 设备。例如,我有一个 URI,content://settings/system/alarm_alert当将其转换为 Chromecast 时,它根本不起作用 -RemoteMediaPlayer返回 2100 的结果,这意味着FAILED。相同的方法,但使用来自服务器的文件,例如http://storage.googleapis.com/automotive-media/Awakening.mp3返回SUCCESS

音频播放的实现方式与UAMP 示例中相同。有没有办法投射本地音频文件?我听说过设置本地 Android 服务器的方法,但这听起来有点复杂。有任何想法吗?

0 投票
1 回答
511 浏览

android - 如何设置 MediaSession.QueueItem 的媒体路径

我正在构建 MediaSession.QueueItems 的 ListArray,目的是将列表作为播放列表推送到 MediaSession。

我注意到在 MediaDescription.Builder 中有一种为项目指定 MediaUri 的方法,但在 API 23 之前它不可用。

问题是:

  1. 如何将媒体文件的路径关联到 MediaSession.QueueItem?
  2. 在 API v21 之后和 API v23 之前做了什么?
0 投票
1 回答
8905 浏览

android - MediaButtonReceiver 不能与 MediaBrowserServiceCompat 一起使用

我正在尝试从耳机或汽车控件接收媒体按钮事件(播放/暂停/等)

这是在我的应用清单中。

这是我的 MediaPlayerService 的一部分

好像我错过了什么。当我按下耳机控件上的暂停按钮时,永远不会调用 onStartCommand。

知道为什么这不能按预期工作吗?

0 投票
2 回答
7785 浏览

android - 始终接收所有 Android 媒体按钮事件的回调(即使另一个应用正在播放音频)

背景信息:我需要检测用户何时按下大多数耳机上的播放/暂停按钮(KEYCODE_MEDIA_PLAY_PAUSE)。

主要使用 MediaSessions 来工作,但是当另一个应用程序开始播放音频时,我停止收到回调。

这似乎是因为播放音频的应用程序创建了自己的 MediaSession,而 Android 仅将 KeyEvents 发送到最新的 MediaSession。为了防止这种情况,我创建了一个 OnActiveSessionsChangedListener 并在每次触发时创建一个新的 MediaSession。

这确实有效,但是每次我创建一个新的 MediaSession 时,监听器都会再次触发,所以我发现自己陷入了一个 inf 循环。

我的问题:有谁知道我可以如何做以下任何事情?:

  • 防止其他应用窃取我的媒体按钮焦点
  • 检测我何时失去了对另一个应用程序的媒体按钮焦点,因此我只能在那时创建一个新的 MediaSession,而不是在活动会话发生变化时创建一个新的 MediaSession
  • 检查我当前是否已经拥有媒体按钮焦点,因此我不必要地创建了一个新的 MediaSession

什么不起作用:

  • AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION 上的 BroadcastReceiver 不起作用,因为应用程序必须手动触发该广播,而许多应用程序,如 NPR One 则没有
  • AudioManager.OnAudioFocusChangeListener 不起作用,因为它需要我有音频焦点
  • 在 android.intent.action.MEDIA_BUTTON 上具有最高优先级的 BroadcastReceiver 并调用 abortBroadcast(),但是当其他应用程序正在播放音频时,我的接收器没有被触发。此外,其他应用程序也可以设置最高优先级。

我的代码:

这是被触发的处理程序:

最后是 Handler 触发的方法:

谢谢!

0 投票
0 回答
275 浏览

android-mediaplayer - MediaControllerCompat 返回错误状态

在我的应用程序中,我正在MediaControllerCompat使用有效实例化 a,Token这是我遇到的问题:我从中获得的值是mController.getPlaybackState().getPosition()我的音频的长度而不是它的位置,上次我更新MediaSession对象的状态我确实设置了正确的播放位置。

这可能是我的代码中的一些东西,但只是想知道在实例化过程中是否有任何东西MediaControllerCompat可以使这种情况发生。

0 投票
0 回答
497 浏览

java - 设置 MediaBrowserService 和 MediaSession 的问题

我想将我的应用程序更新到最新的 android 标准,所以我想实现 MediaSession 和进一步的 MediaBrowserCompat 来控制我的播放。

实际上我收到了这个错误:

java.lang.NullPointerException:尝试在 android.os.Binder.queryLocalInterface(Binder.java:247) 的空对象引用上调用虚拟方法“boolean java.lang.String.equals(java.lang.Object)” .service.media.IMediaBrowserService$Stub.asInterface(IMediaBrowserService.java:31) 在 android.media.browse.MediaBrowser$MediaServiceConnection.onServiceConnected(MediaBrowser.java:709) 在 android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java :1209) 在安卓。app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1226) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os .Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5294) 在 java.lang.reflect.Method.invoke(Native Method) 在 java.lang.reflect.Method.invoke (方法.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)

由此代码引起:

这是我的 MusicService 的一部分:

我希望你能帮助我...我在 youtube 上观看了 Google Developer 视频,但我并不清楚如何做到这一点...任何示例源代码等都会很棒!

谢谢!

0 投票
1 回答
1182 浏览

android - 如何让Android MediaSession在显示进度时考虑播放速度

我有一个播放一些内容的 Android 应用程序。我正在使用以下信息初始化 MediaSession 对象:

一切正常。我可以从我的汽车 BT 接收器控制播放,文件元数据已发布,但是进度条/时间会更新,就好像提供的播放速度是 1.0 倍一样,即使我正在发送像 3.0 倍这样的值

我能够正确更新进度条的唯一方法是每秒钟使用新的播放位置调用 mediaSession.setPlaybackState(...) 。看起来 mediaSession 没有考虑速度参数。有人知道如何进行这项工作吗?

谢谢

0 投票
1 回答
2104 浏览

android - 如何使用 MediaSession.setMediaButtonReceiver(PendingIntent) 恢复播放

当我的应用程序停止时单击耳机按钮时,我试图能够从我的应用程序开始音乐播放。

我可以使用 MediaSession.CallbackonMediaButtonEvent()或现在已弃用registerMediaButtonEventReceiver()的收听媒体按钮单击我的应用程序正在播放音乐时,但如果我暂停音乐一分钟,我的活动和播放服务仍在运行,然后我按下耳机按钮,我看到我失去了接收媒体按钮广播的能力。相反,Google Now 会打开。

我正在尝试做的是类似于 Google Play 音乐的东西。即使应用程序完全停止,它也可以开始播放音乐……后台没有服务。

我觉得setMediaButtonReceiver()是用于此的,但我无法让它工作。

setMediaButtonReceiver(PendingIntent mbr)

为您的媒体按钮接收器设置待处理的意图,以允许在会话停止后重新开始播放。如果您的应用以这种方式启动,则会通过待处理的 Intent 发送 ACTION_MEDIA_BUTTON Intent。

我的服务中有以下代码段。

我的 RemoteControlReceiver BroadcastReceiver 已在 Manifest 中注册,但是当我按下按钮时我没有收到任何广播。

我还看到其他音乐播放器应用程序在停止播放大约一分钟后就失去了接收媒体按钮广播的能力。

有什么想法可以让我拥有更强大的媒体按钮控件吗?

提前致谢!

0 投票
1 回答
888 浏览

android - Android MediaSession 按钮

允许与媒体控制器、音量键、媒体按钮和传输控件进行交互。

MediaSession 文档声明它适用于媒体按钮和传输控件。这是否仅包括设备上的物理按钮,或者您是否可以实现触发 MediaSession 回调的 UI 按钮?