问题标签 [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.
android - SeekTo 不会在 MediaControllerCompat 中触发 onPlaybackStateChanged
我有这个媒体播放器,其他一切正常,我开始播放歌曲,它通过 2 个状态,最后一个是PlaybackStateCompat.STATE_PLAYING
因此我们可以说回调是注册的。问题是每当我触发 SeekBar 侦听器时,该方法seekTo
都不会触发,onPlaybackStateChanged
并且因为这没有发生,所以我无法将 SeekBar 更新为其新进度。这仅涉及 UI。音乐实际上是从修改 SeekBar 进度后的进度播放的。更重要的是,trackDurationTextView 也没有得到更新。当我在搜索栏上拖动拇指时,它会改变它的值,但是一旦我松开它,它就会进入它的初始进度,与搜索栏相同。
这是注册回调的地方。
这是回调的初始化方式:
这是OnSeekBarChangeListener
这是在搜索栏更新后 mLastPlayBackState.getPosition 应该返回新值的地方,但它始终返回 0,因为永远不会调用 onPlaybackStateChanged。任何想法为什么?
android - Android:关于 MediaSessionManager 和 RemoteController 的事情我不清楚
我尝试浏览网络以查看 MediaSessionManager 的作用和用途以及阅读 RemoteController(自 API 21 以来已弃用),因此我可以查看这些 api 是否可以解决我的问题。
目前,我正在使用 AudioManger 并发送关键事件以停止/暂停/播放来自其他音乐播放器的当前音频......它确实完成了这项工作。现在我想知道它是否可以用于媒体播放器,例如播放视频的 YouTube 应用程序,而我从其他设备上的应用程序可以像遥控器一样控制第二台设备上的视频播放。
我最终阅读了MediaSessionManager。它为当前正在播放的音乐播放器提供所有活动的媒体会话。我不确定它是否是解决上述情况的正确解决方案。由于我正在使用 Android 4.4.2,我认为 MediaSessionManager 可能不是正确的方法,所以我找到了一个名为 RemoteController 的东西,但不确定它是如何工作的,以及它是否有助于解决我的问题
这里有太多东西,我不知道从哪里开始。
android - 耳机按键控制 Android 5.0
我正在编写一个程序来捕捉耳机按钮的按下,然后根据你按下它的时间和次数来做不同的事情。争取 API 级别 21。Android 5.0。所以我可以捕捉按钮按下,但是当启动 mp3 播放器时,它开始捕捉按钮按下。我怎样才能防止这种情况?第二个问题你如何恢复暂停的 mp3,它和其他程序不是我播放 mp3 的程序。
java - MediaControllerCompat 内存泄漏
我有一个在建立连接MediaControllerCompat
时创建的实例MediaSession
。完成此连接后,我创建MediaControllerCompat
以下方式:
令牌是从 获取的MediaSession
。
每次按下后退按钮都会检测到泄漏。我没有注册到任何回调/侦听器MediaControllerCompat
。我已经尝试MediaController
在活动的onDestroy()
方法上设置为 null,但没有成功。
按照下面的 LeakCanary 日志。
有谁能够帮我?
提前致谢。
android - 应用程序在第二次调用 setActive(true) 时不会成为首选 MediaButtonReceiver
我已尝试根据Google 的谈话实现媒体按钮控制
我在清单中设置了接收器:
创建MediaSessionCompat
服务onCreate()
:
并处理意图onStartCommand()
然后setActive(true);
,当我获得音频焦点和setActive(false);
停止播放时,我会打电话。这是第一次,我的应用程序成为首选的媒体按钮接收器并接收回调。
但是,如果我在我的应用程序中停止播放,进入另一个应用程序(如 Google Play 音乐)并在那里开始播放,然后返回我的应用程序并调用setActive(true)
Google Play 音乐继续接收回调,并且媒体按钮在我的应用程序中不起作用。
据我了解,最后一次调用setActive(true)
应该优先。我已经验证isActive()
返回 true。我也可以通过每次创建一个新的来解决这个问题MediaSessionCompat
,但这似乎并不理想。
每次打电话时,如何让我的应用程序成为首选的媒体按钮接收器setActive(true)
?
更新:在此处重现问题的最小项目:https ://github.com/svenoaks/MediaButtonDemo.git
重现步骤:
- 运行应用程序,按 PLAY 按钮。
setActive(true)
被调用并且 MediaButtonReceiver 现在是首选的媒体按钮。 - 按有线或无线耳机或其他媒体按钮上的播放/暂停按钮。Toast 显示表明回调正在工作。
- 在支持媒体按钮的其他应用程序(例如 Google Play 音乐)上开始播放。在这个应用程序上按暂停。
- 演示应用程序不再是首选的媒体按钮接收器,即使再次按下 PLAY 按钮,再次调用
setActive(true)
。另一个应用程序始终响应媒体按钮。
这是在 Android 6.0 上测试的。
android-service - MediaBrowserServiceCompat 方法
如何从活动访问我在 MediaBrowserServiceCompat 中定义的公共方法(不是覆盖的方法)?
早些时候我只使用了服务,所以我可以将它与活动类绑定,然后轻松访问方法。
现在因为没有返回活页夹(onBind 没有在 mediaBrowserService 中被覆盖),那怎么做呢?
(我还从 ianblake 的博客中读到 mediaBrowserService 是自动绑定的……这在这里有用吗?)
android - 将位图放在 MediaSessionCompat 上没有在锁屏中显示 ART WORK?
将位图放在 MediaSessionCompat 上不会在锁屏中显示 ART WORK。上面的代码在轨道发生变化时使用。
android-service - 如何从 Activity 调用 mediaBrowserService 中的 getDuration?
早些时候,使用 boundService 这可以很容易地实现。但是使用 MediaBrowserService 我无法访问外部的 getDuration,没有它我无法更新搜索栏。
android - Android Media Duration 返回错误值
我已经使用这些设置了我的应用程序:
https://gist.github.com/ianhanniballake/15dce0b233b4f4b23ef8
持续时间显示为 10,我认为这是因为将 10000 除以putLong(MediaMetadataCompat.METADATA_KEY_DURATION, 10000);
1000mEnd.setText(DateUtils.formatElapsedTime(duration/1000));
得到秒格式。但是为什么是10000?
如何获得正在播放的曲目的原始持续时间?
android - MediaMetadataCompat METADATA_KEY_ART 只设置图像第一次
在我的应用程序中,我使用MediaSessionCompat
来处理来自我的媒体播放器服务的播放音频。特别是,我想将当前歌曲的元数据广播到蓝牙设备(有效),并将锁屏图像设置为当前歌曲的专辑封面。
类似于这个问题:Set lock screen background in Android (like Spotify do)
每次歌曲更改时,我首先清除当前MediaMetadataCompat
等:PlaybackStateCompat
MediaSessionCompat
然后,我使用它们各自的构建器创建这些类的新实例
然后我在MediaSessionCompat
在我的蓝牙设备上,元数据工作正常,并且每次歌曲更改时都会更改。然而,在我的手机上,锁屏专辑封面仅在第一次更新。我已经确认我设置的位图是新的,但图像没有改变。
我还在服务中创建了一个媒体样式通知,以允许用户通过持久通知和锁定屏幕控制音乐。
但是,setLargeIcon
我的媒体通知方法对锁定屏幕上显示的专辑封面没有影响。这使它显示在通知本身中,而不是作为锁定屏幕背景。