问题标签 [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 回答
3428 浏览

android - 如何修复“找不到媒体按钮接收器”异常

我正在构建媒体播放器,并希望处理来自“播放”、“暂停”等通知的操作。在我的活动中我注册了MediaButtonReceiver

并创建了媒体通知

但是当我按下媒体通知上的操作按钮时,什么也没有发生。当我添加这些动作时,执行

打印以控制台警告

“W/MediaButtonReceiver:在给定的上下文中找不到唯一的媒体按钮接收器,因此无法构建待处理的意图。”

但是,如果我以编程方式注册它,为什么它没有注册呢?

0 投票
1 回答
94 浏览

android - 系统“UI 已停止”MediaSessionCompat

我在我的 android 设备崩溃时遇到系统 UI 问题。每次我尝试激活 mediaSessionCompat 时都会发生这种情况。我已经研究过以下帖子的建议: https ://github.com/firebase/quickstart-android/issues/382 但没有用。下面只是一个包含更多信息的简单代码示例。

我试图禁用所有图标,并将它们设置为我通过图像资产创建器创建的旧图标。

我正在构建应用程序:

  • minSdkVersion 21
  • targetSdkVersion 27
0 投票
0 回答
147 浏览

android - 从 API 23 但不是 27 上的电话返回时的 MEDIA_ERROR_SERVER_DIED

我必须维护一个使用MediaSessionCompatMediaPlayer从服务器流式传输音频文件的应用程序。

我在 Pixel XL 和 Nexus 5 (API 23) 上重现了一个错误,该错误不会在运行的相同设备 (API 27) 上发生。我听说过一个运行 API 28 的 XL 用户也遇到过这种情况。

当有电话打进来时,应用程序无法躲避它,所以我们暂停了。在 API 27 上,调用结束,应用程序获得音频焦点,我们再次开始播放。在 API 23(和 28?我还没有确认)上,一旦调用结束,媒体服务器就会崩溃并出现错误 100 ( MEDIA_ERROR_SERVER_DIED)。每次通话结束时可靠地崩溃。

我无法对它做出正面或反面。

有谁知道为什么它在 27 上很好但在 23 上不行,或者我可以做些什么来防止崩溃(而不是在崩溃后尝试重新启动一切)?

堆栈跟踪看起来像这样

10-31 17:36:04.499 8062-8074/? A/AudioTrackShared: Assertion failed: buffer == NULL || buffer->mFrameCount == 0 10-31 17:36:04.499 8062-8074/? A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 8074 (FastMixer) 10-31 17:36:04.500 1362-1362/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 10-31 17:36:04.500 1362-1362/? A/DEBUG: Build fingerprint: 'Android/sdk_google_phone_x86/generic_x86:6.0/MASTER/5056751:userdebug/test-keys' 10-31 17:36:04.500 1362-1362/? A/DEBUG: Revision: '0' 10-31 17:36:04.500 1362-1362/? A/DEBUG: ABI: 'x86' 10-31 17:36:04.500 1362-1362/? A/DEBUG: pid: 8062, tid: 8074, name: FastMixer >>> /system/bin/mediaserver <<< 10-31 17:36:04.500 1362-1362/? A/DEBUG: signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr -------- 10-31 17:36:04.500 1639-1727/system_process W/NativeCrashListener: Couldn't find ProcessRecord for pid 8062 10-31 17:36:04.502 1362-1362/? A/DEBUG: Abort message: 'Assertion failed: buffer == NULL || buffer->mFrameCount == 0' 10-31 17:36:04.502 1362-1362/? E/DEBUG: AM write failed: Broken pipe 10-31 17:36:04.502 1362-1362/? A/DEBUG: eax 00000000 ebx 00001f7e ecx 00001f8a edx 00000006 10-31 17:36:04.502 1362-1362/? A/DEBUG: esi b427f980 edi 00000000 10-31 17:36:04.502 1362-1362/? A/DEBUG: xcs 00000073 xds 0000007b xes 0000007b xfs 00000000 xss 0000007b 10-31 17:36:04.502 1362-1362/? A/DEBUG: eip b6fb7f56 ebp 00001f8a esp b427ee80 flags 00200206 10-31 17:36:04.504 1362-1362/? A/DEBUG: backtrace: 10-31 17:36:04.504 1362-1362/? A/DEBUG: #00 pc 00083f56 /system/lib/libc.so (tgkill+22) 10-31 17:36:04.504 1362-1362/? A/DEBUG: #01 pc 000815e8 /system/lib/libc.so (pthread_kill+70) 10-31 17:36:04.504 1362-1362/? A/DEBUG: #02 pc 00027205 /system/lib/libc.so (raise+36) 10-31 17:36:04.504 1362-1362/? A/DEBUG: #03 pc 000209e4 /system/lib/libc.so (abort+80) 10-31 17:36:04.504 1362-1362/? A/DEBUG: #04 pc 0000cbc3 /system/lib/libcutils.so (__android_log_assert+128) 10-31 17:36:04.504 1362-1362/? A/DEBUG: #05 pc 0008353d /system/lib/libmedia.so (android::ServerProxy::obtainBuffer(android::Proxy::Buffer*, bool)+669) 10-31 17:36:04.504 1362-1362/? A/DEBUG: #06 pc 00053af7 /system/lib/libaudioflinger.so 10-31 17:36:04.504 1362-1362/? A/DEBUG: #07 pc 00066155 /system/lib/libaudioflinger.so 10-31 17:36:04.504 1362-1362/? A/DEBUG: #08 pc 0002630a /system/lib/libaudioflinger.so 10-31 17:36:04.504 1362-1362/? A/DEBUG: #09 pc 00026d42 /system/lib/libaudioflinger.so 10-31 17:36:04.504 1362-1362/? A/DEBUG: #10 pc 00025e93 /system/lib/libaudioflinger.so 10-31 17:36:04.504 1362-1362/? A/DEBUG: #11 pc 0006c19a /system/lib/libaudioflinger.so 10-31 17:36:04.504 1362-1362/? A/DEBUG: #12 pc 0006d88f /system/lib/libaudioflinger.so 10-31 17:36:04.504 1362-1362/? A/DEBUG: #13 pc 00014aac /system/lib/libutils.so (android::Thread::_threadLoop(void*)+418) 10-31 17:36:04.504 1362-1362/? A/DEBUG: #14 pc 000141cf /system/lib/libutils.so (thread_data_t::trampoline(thread_data_t const*)+122) 10-31 17:36:04.504 1362-1362/? A/DEBUG: #15 pc 00080a93 /system/lib/libc.so (__pthread_start(void*)+56) 10-31 17:36:04.504 1362-1362/? A/DEBUG: #16 pc 00021952 /system/lib/libc.so (__start_thread+25) 10-31 17:36:04.504 1362-1362/? A/DEBUG: #17 pc 000170b6 /system/lib/libc.so (__bionic_clone+70)

0 投票
1 回答
648 浏览

android - 后台执行限制和前台服务被杀死

我正在尝试使用来自 Google 的 Universal Music Player plus 的代码播放一些音乐PlayerNotificationManager,这不是原始代码的一部分(但属于 ExoPlayer 2)。

我的服务startForeground(...)通过来自以下位置的回调正确执行PlayerNotificationManager

一切似乎都还好,直到我将应用程序的主要活动归还,并且服务在几秒钟内被仁慈地杀死了:


该服务通过使用正确启动

Util.startForegroundService(...)

那么可能有什么问题呢?

0 投票
0 回答
449 浏览

android - 从android中的媒体会话中删除活动歌曲

我有一个应用程序正在使用 Android MediaSession 和 MediaBrowserConnection 来播放歌曲并有一个播放列表。当有人想要清除整个播放列表时,我对如何删除当前正在播放的歌曲感到有点困惑。我可以像这样轻松地从队列中删除所有剩余的歌曲......

其中 mediaControllercompat 是一个 MediaControllerCompat 对象。

但是我找不到一种简单的方法来删除正在播放的歌曲。以上只是删除队列中的所有歌曲,而不是活动歌曲。

我想我可以通过强制“跳过”功能来伪造它,因为播放列表是空的,它会停止播放,但我想知道这是否是正确的方法,或者是否有更好的方法来处理它。

如果需要,我将非常乐意显示任何相关代码。我只是不确定到底需要什么代码,因为有 9 个左右的类,不包括回调类内部的类等等。如果我需要展示其他内容,请告诉我。谢谢你。

0 投票
1 回答
188 浏览

android - MediaBrowserCompat 队列查找项

根据Uamp样本,当onPlayFromMediaId被调用时,它与已存储mediaId的列表匹配,如下所示queueitemsiterator

这很好用,除非你的列表中有几千个项目,它的滞后很严重,在这种情况下我有什么办法可以在队列中获取索引?

PS-此代码来自 v1 分支,尽管基于 v2 kotlin 的分支具有相同的概念。

0 投票
0 回答
125 浏览

android - Android模拟器没有收到媒体按钮回调

我已经在手机上安装了该应用程序,并且在按下耳机上的按钮时会按预期执行回调,但在模拟器上它什么也不做。

使用以下代码生成媒体按钮按下:

有趣的是,我可以使用此命令停止拨出电话。

我什至在 Logcat 的输出中发现了按钮按下日志:

创建 MediaSession 的代码:

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

android - Android - 防止锁屏 FaceWidget“音乐控制器”覆盖我的音乐播放器应用通知

我尝试在锁定屏幕和 AOD 屏幕上向音乐控制器添加自定义命令,但没有成功,因此我决定制作自定义通知(至少对于锁定屏幕)。问题是,如果用户有一个 FaceWidget(设置 > 锁定屏幕 > FaceWiget > “音乐控制器”打开,那么它会接管并显示 3 个按钮控制而不是我的通知。我该如何防止这种情况发生?

我想为我的应用禁用的示例

我在 androidx 中使用 exoPlayer 和 MesiaSessionCompat。

0 投票
0 回答
592 浏览

android - 为什么 MediaSession 不改变锁屏背景(可能是位图大小问题:阅读了解更多信息)?

在通过媒体会议进行深入研究后,我从过去 6 天开始就陷入了这个问题,我发现了这条重要的线

  • 用于在锁定屏幕上显示的专辑插图。图像是最大尺寸为 320x320dp 的位图(如果更大,则按比例缩小)。

现在,这是我的媒体会话和通知代码...

媒体专场

元数据的方法...

现在通知....

一切正常,如锁定屏幕上的控件等,但唯一的问题是不更改设备的锁定屏幕壁纸

我怎样才能做到这一点......或者

如何检查位图 dp 大小或将位图缩小到所需的 dp 大小

随时询问更多信息