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

android - Android:检测来自 STREAM_VOICE_CALL 的声音是否正在播放

我正在寻找一种方法来检查其他应用程序是否正在使用 STREAM_VOICE_CALL(例如在通话期间或在收听将手机放在耳边的 whatsapp 语音笔记时)(但通常我们应该找到一种方法来选择任何流监视)。我需要在Tasker中使用它,但这应该是无关紧要的(但应该帮助其他有同样问题的人找到这个)。

基本上这是完美的:

可以与任何音频流一起使用......在我的情况下

太糟糕了 AudioSystem 现在被AudioManager类取代了 :( (有关 AudioSystem 在这个其他线程Android 中的信息:有没有办法检测来自 SoundPool 的声音是否仍在播放

现在我们有了我尝试过的AudioManager.isMusicActive,它可以完美运行,但它当然是指 STREAM_MUSIC。

有什么建议吗?谢谢

0 投票
1 回答
1784 浏览

android - 差异媒体控制器与传输控制 Android

在处理 MediaPlayer 和 MediaSession 类时,我试图了解这两个 Android 构造中的每一个实际上是什么,当然它们是如何工作的,尤其是传输控件。

从有关 MediaSession 的官方文档中,它

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

据我了解,媒体按钮是指设备上的实际物理按钮(如果存在)或例如。在蓝牙耳机上。音量键很明显。

当谈到媒体控制器时,我想我设法弄清楚它指的是一个特定的视图,具有播放/暂停按钮以及跳过下一个/上一个等按钮的 FrameView。但是传输控件到底是什么,在哪里可以/应该使用它们以及它们是如何在代码中实现的?

提前感谢您的任何答案!

0 投票
0 回答
207 浏览

android - 无法在服务中获得 Avrcp 焦点以接收正确的媒体密钥事件

我有从 QuickSettigs Tile 开始的服务。此服务应从蓝牙耳机接收 MEDIA_BUTTON 事件。它一直在工作,直到我启动任何媒体播放器应用程序活动(不是服务!)。

如何表示问题:

  1. 启动 MyService - CLICK BT MEDIA_BUTTON - MyService 捕获的事件
  2. 停止 MyService - 单击 BT MEDIA_BUTTON - 媒体播放器应用程序启动
  3. CLICK BT MEDIA_BUTTON - 媒体播放器捕捉停止事件
  4. 启动 MyService - CLICK BT MEDIA_BUTTON - MyService 捕获的事件
  5. 打开媒体播放器应用程序Activity
  6. 按主页按钮以最小化媒体播放器应用程序活动
  7. 启动 MyService - CLICK BT MEDIA_BUTTON -媒体播放器捕获事件(等等为什么?!MyService MediaSession 处于活动状态!)
  8. 停止我的服务
  9. 启动 MyService - CLICK BT MEDIA_BUTTON -媒体播放器捕获事件
  10. 停止我的服务
  11. 启动 MyApplication 活动
  12. 按主页按钮以最小化 MyApplication 活动
  13. 启动 MyService - CLICK BT MEDIA_BUTTON - MyService GOTO:1捕获的事件

我试过了:

  • 使用 AudioManager 获取 AudioFocus - 获得焦点
  • 使用 MediaPlayer 播放声音 - 没有任何变化

但没有什么能解决问题。

在第一个媒体播放器活动启动 Avrcp 焦点锁定后:当我启动 MyService 时,在 logcat Avrcp 服务中说它的焦点是由媒体播放器应用程序(例如 DDB2 或留声机)获得的,我无法得到它(Avrcp 焦点,而不是 AudioFocus)。

我不明白 MediaService 在 Android 中是如何工作的。如何调试这个?

0 投票
1 回答
2514 浏览

android - MediaBrowserServiceCompat 中 onGetRoot() 和 onLoadChildren() 的作用是什么?

我是 Android 开发的初学者,试图创建一个具有 和 实现的媒体播放MediaBrowserMediaSession

我对onGetRoot()and的功能感到困惑onLoadChildren()

  1. 我的第一个问题是layman's term这两种方法的目的是什么。
  2. 他们所涉及的根源是onGetRoot()什么?我想到的是,它是目录的根目录,对吗?
  3. 孩子们在做onLoadChildren()什么?我想到的是根目录中的音乐列表,对吗?
  4. 这会onLoadchildren()返回实际的播放列表吗?
0 投票
1 回答
54 浏览

android - 隐藏 MediaSessionCompat 的通知

我正在使用 MediaSessionCompat 来获取音量键事件和播放/暂停,但是,

我不想在手表上显示通知,因为我不玩任何东西,如果可能的话,也不显示音量变化栏,因为我不打算改变音量,只是改变我的内部状态。

那可能吗?

0 投票
0 回答
395 浏览

android - 无法设置锁屏专辑封面

我正在构建一个音频播放器。为此,我实现了一个后台服务。现在,我正在尝试使用 mediasession 将音频的专辑封面显示为锁屏壁纸。我已经成功实现了锁屏播放控件和通知,但我无法将专辑封面显示为锁屏壁纸。

我正在使用的代码:

0 投票
0 回答
559 浏览

android - 使用 Android 媒体框架管理音乐(歌曲)队列

如何在离线媒体播放器应用程序中管理歌曲队列(添加歌曲、删除歌曲和重新排列)。是否可以使用“MediaSessionCompat”等提供的方法来管理队列,
mediasession.addqueue() mediasession.addQueueItem() 或者
我们必须使用自己的逻辑来管理队列。

0 投票
0 回答
407 浏览

android - 保留 Android Auto 播放队列插槽的 MediaSession Extra 不起作用?(ALWAYS_RESERVE_SPACE_FOR.ACTION_QUEUE)

多个文档源和示例应用程序解释了如何为 提供特定的 Extra 值,MediaSession.setExtras(Bundle)以便保留用于标准 Android Auto 媒体操作按钮的空间,即使这些操作当前不可用。这是为了防止自定义操作从次要操作卡回流到主要操作卡上的空位。例如,为 Auto 文档提供音频播放的设置标准播放操作部分指出:

Android Auto 在其 UI 中为播放队列和 ACTION_SKIP_TO_PREVIOUS 或 ACTION_SKIP_TO_PREVIOUS 操作保留空间。如果您的应用程序不支持任何这些功能,则 UI 将不会显示它们的控件。它会将未使用的空间分配给您创建的任何自定义操作。如果您不想用自定义操作填充这些空间,您可以“保留”它们,以便 Android Auto 在启用操作时显示相应按钮,并在未启用操作或播放队列时将空间留空不存在

要保留空间,请使用包含下面定义的键的包调用 setExtras()。将每个键设置为布尔值 true:

// 使用这些附加功能来显示相应操作的传输控制按钮,即使它们在 PlaybackState 中未启用。

私有静态最终字符串 SLOT_RESERVATION_SKIP_TO_NEXT = "com.google.android.gms.car.media.ALWAYS_RESERVE_SPACE_FOR.ACTION_SKIP_TO_NEXT";

私有静态最终字符串 SLOT_RESERVATION_SKIP_TO_PREV = "com.google.android.gms.car.media.ALWAYS_RESERVE_SPACE_FOR.ACTION_SKIP_TO_PREVIOUS";

私有静态最终字符串 SLOT_RESERVATION_QUEUE = "com.google.android.gms.car.media.ALWAYS_RESERVE_SPACE_FOR.ACTION_QUEUE";

但是,根据我的经验,三个 Extras 中只有两个可以正常工作。保留下一个和上一个插槽的附加功能按文档说明工作,但我从未能够让队列保留附加功能正常工作。如果 MediaSession 队列为 null 或为空,Android Auto 始终隐藏 Queue 按钮并将自定义操作按钮重排到第一个插槽中,如果提供了插槽预留 Extra,则忽略它。

只需对Google 的通用媒体播放器示例应用程序进行一些小改动,即可轻松重现该问题;只需设置一个 null 或空队列,定义几个自定义操作,您将看到队列保留标志被忽略。UMP 示例项目包括帮助设置适当 Extras的CarHelper 类。您可以在大多数 Android Auto 媒体应用示例中找到它的变体。

Queue reservation Extra 是否存在已知问题?有没有人看到队列预订额外的工作?

0 投票
0 回答
443 浏览

android - 如何将我现有的 MediaPlayer 与锁屏通知链接

也许标题不够明确,让我解释一下。

我正在处理一个已经存在的代码,Java for Android 应用程序。实际的应用程序有一个播放音频流的媒体播放器,布局中只有一个播放/暂停按钮。play 被初始化并在活动中使用。当手机被锁定时,流继续播放,但没有通知显示下一个上一个等按钮。

使用本教程,当我从活动中调用此服务时,我设法在锁定屏幕和通知区域上显示通知:

但它显然不能很好地工作,因为已经存在的会话没有链接到通知上新创建的控制器。

所以我想知道是否更好:

  • 使用我创建的新服务并尝试将其链接到现有会话
  • 从活动中删除之前的媒体播放器并处理服务中的所有媒体事物
  • 将所有媒体处理保留在活动中

我对 Android 中的媒体处理不是很熟悉。

这是实际代码的一些预览:

我还看到了一些使用 MediaSessionCompat 的示例。更好地使用 MediaSession 或 MediaSessionCompat?

谢谢

0 投票
2 回答
2104 浏览

java - MediaSessionCompat.Callback 的 onSkipToNext() 和 onSkipToPrevious() 没有被触发

我正在尝试在 Android 中实现通知播放器。我按照指南实现了这一目标。但是,作为我的要求,我需要在后台通知播放器中实现“跳到下一个”和“跳到上一个”。

到目前为止,MediaSessionCompact.Callback 的 onPlay() 和 onPause() 都被触发了。但是,在调试时,我注意到在通知播放器中按下下一个和上一个按钮时,不会触发 onSkipToNext() 和 onSkipToPrevious() 回调方法。

感谢您的意见。我在下面添加了相关代码。

背景音频服务

媒体风格助手

MainActivity的 onCreate

主要活动

更新

似乎 onMediaButtonEvent() 在通知播放器中为下一个和上一个触发,两个按钮的动作名称为“android.intent.action.MEDIA_BUTTON”。