问题标签 [media-buttons]

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

android - Android“O”(奥利奥,8)和更高的媒体按钮问题

我在 Text-to-Speech 应用程序中使用的用于处理来自耳机的媒体按钮的代码在 Android API 22 到 25 下运行良好(在旧版本的 Android 中,它们由其他现已贬值的方式处理)。然而,在 Android 8“Oreo”下,无论是公开测试版还是最终版本,它都不起作用。以下是相关代码:

当服务启动时,我创建 MediaSessionCompact 对象:

当然定义了会话媒体回调:

我还尝试了 PendingIntent,使用 MediaButtonReceiver.buildMediaButtonPendingIntent() 并为我感兴趣的所有操作设置 mSession.setMediaButtonReceiver(pendingIntent),然后在我的服务 onStartCommand() 中调用 MediaButtonReceiver.handleIntent(mSession, intent):

在服务 onStartCommand() 中:

没什么,媒体按钮按下事件完全是愚蠢的。“O”或我的代码有什么问题???我完全感到困惑。

2017 年 8 月 32 日更新

我还创建了一个简单但有效的应用程序项目来演示该问题,请参阅:https ://github.com/gregko/PlayerServiceSample 。此项目在 Android 5.x 到 7.x 下在耳机上按下媒体按钮时显示 LogCat 输出,但在 Android 8“Oreo”下完全失败。

2017 年 9 月 1 日更新 Android 问题跟踪器上现在有一个关于此问题的未解决问题,我在https://issuetracker.google.com/issues/65175978提交了该问题。媒体按钮仍然可以在我在 Oreo 上测试的几个音乐播放器应用程序中工作,我只是不知道它们做了什么不同的工作以使它们工作......我的应用程序的上下文不是播放音乐,而是用文本大声朗读文本到语音服务,因此音乐播放器示例中的许多代码不适用。

0 投票
1 回答
89 浏览

android - 如何在屏幕锁定时捕获媒体按钮?

我试图弄清楚 Spotify 等应用程序如何在屏幕关闭或锁定时捕获耳机按钮按下。我目前能够使用我的类 HeadSetActionButtonReciever 捕捉按钮按下,只有当应用程序处于前台时。但是当应用程序在后台时,我无法捕获这些点击。有人可以向我解释为什么会这样以及如何在后台捕获它吗?

0 投票
2 回答
3904 浏览

android - 当应用程序在后台时 MediaButtonReceiver 不起作用

我使用本指南MediaButtonReceiver为我的媒体播放器应用程序添加功能。

到目前为止,应用程序处于前台运行良好,但一旦应用程序进入后台,它就会停止接收媒体按钮操作。

部分清单

媒体播放器服务的一部分

请问我做错了什么,当应用程序处于前台时,如何使服务接收按钮操作?

0 投票
0 回答
430 浏览

android - ACTION_MEDIA_BUTTON 在 BroadcastReceiver 中不起作用

这是我之前的一个问题的后续问题

我在运行 Android v8 的三星 Galaxy S7 上使用 android sdk 26,并尝试使用耳机上的播放/暂停按钮(HEADSETHOOK,键码 79)。根据@Commonsware 和@Pawel 的建议,我从主要活动中注册了接收器,现在它正在工作,因为它可以识别耳机何时从手机上插入/拔出。但是,尽管在前台活动中使用 onKeyDown 时能够捕获按钮按下,但 BroadcastReceiver 并未将其识别为 ACTION_MEDIA_BUTTON (或据我所知的任何其他内容)。所发生的一切是,当我长按时会调用默认应用程序(Google Assistant),而短按则什么都没有。

这是我的代码(全部包含在一个类中):

}

  1. 我做错了什么(如果有的话)?
  2. HEADSETHOOK(键码 79)的 Intent 常量是什么?
  3. 如果没有这样的常量,是否可以向 IntentFilter 添加特定的键码?

  4. 帮助!!

0 投票
0 回答
114 浏览

wordpress - 如何自定义添加媒体按钮,单击wordpress中的按钮后在弹出窗口中弹出我的自定义html

我有下面的代码。我需要一个按钮,例如在管理员的编辑页面中添加媒体,单击时会显示一个弹出窗口并显示我的自定义 html,其中包含一个表单。

我在下面尝试过,但我得到了不必要的东西,比如上传文件选项卡、媒体库选项卡等,我不需要所有这些,但我只需要单击按钮上的自定义表单。

索引.php

cp.js

有人可以帮我吗

0 投票
0 回答
510 浏览

android - 在 Android 8.0+ 中处理来自服务的媒体按钮?

我正在尝试使用 MediaSessionCompat 类从 Android 中的服务处理耳机挂钩以启动我的应用程序的操作,这与媒体播放器的目的不同。

现在,我编写的这段代码可以在 Android 7 及更低版本中运行,但不适用于 Android 8.0 及更高版本,我不知道为什么。

我试图将此代码放入 MainActivity 的 OnStart() 和我的服务的 onStartCommand 中,但什么也没发生。

我也试过把它留在我的清单中,但没有用。

我离开了我的接收器和我的服务,也许我在某个地方受到了委屈,或者任何人都可以帮助我理解为什么不起作用,不幸的是,Android 的文档对这件事毫无用处。

接收者:

服务:

0 投票
0 回答
455 浏览

android - 处理 Android 蓝牙耳机按钮

这个话题有时会弹出,但我不能让那个东西工作。我的应用程序曾经处理媒体按钮,但在 Android 5.0 之后的 API 发生了变化,它需要使这个应用程序适应“捕捉”蓝牙按钮并“以我的方式”处理它们。

我做了很多搜索,发现:

但是……还是不行。每当我按下任何媒体按钮时,我都会在 Logcat 中得到这个:

2019-06-16 19:40:14.458 2936-4422/? D/MediaSessionService:发送 KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_MEDIA_NEXT, scanCode=0, metaState=0, flags=0x0, repeatCount=0, eventTime=0, downTime=0, deviceId=-1, source=0x0 }到最后已知的 PendingIntent PendingIntent{afe4538: PendingIntentRecord{13648e com.google.android.youtube broadcastIntent}} 2019-06-16 19:40:14.460 3230-3230/? V/Avrcp: recordKeyDispatched: KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_MEDIA_NEXT, scanCode=0, metaState=0, flags=0x0, repeatCount=0, eventTime=0, downTime=0, deviceId=-1, source=0x0 } 调度到 com.google.android.youtube 2019-06-16 19:40:14.466 2936-4422/? D/MediaSessionService: 发送 KeyEvent { action=ACTION_UP, keyCode=KEYCODE_MEDIA_NEXT, scanCode=0, metaState=0, flags=0x0, repeatCount=0, eventTime=0, downTime=0, deviceId=-1, source=0x0 } 到最后一个已知的 PendingIntent PendingIntent{afe4538: PendingIntentRecord{13648e com.google.android.youtube broadcastIntent}} 2019-06-16 19:40:14.475 3230-3230/? V/Avrcp: recordKeyDispatched: KeyEvent { action=ACTION_UP, keyCode=KEYCODE_MEDIA_NEXT, scanCode=0, metaState=0, flags=0x0, repeatCount=0, eventTime=0, downTime=0, deviceId=-1, source=0x0 } 调度到 com.google.android.youtube

我的应用程序没有收到任何回调。我错过了什么?

0 投票
1 回答
103 浏览

android - 通过按下硬件按钮启动 android 应用程序

感谢您阅读我的问题,请不要提及较旧的答案,因为我在这里经历了所有旧的答案,但没有任何结果。我试图在 android 开发者文档中从响应媒体按钮中找到一些东西,但我不明白。请善待我,支持我!

我正在为盲人开发一个 android 应用程序因此我希望通过使用特定的硬件按钮点击来启动这个应用程序。我怎样才能做到这一点?欢迎任何建议,帮助,指点!

0 投票
1 回答
158 浏览

android - 使用 MediaButton 控制前台应用程序(无音频),后台有音频

我想使用媒体按钮来控制前台应用程序,但不能用于音频。所以目标是检测按钮点击以在应用程序中执行某些操作。

我可以通过使用MediaSessionMediaButtonReceiver. 看这里

问题是当应用程序被使用时,用户经常在后台播放音乐,所以后台应用程序的音频焦点接管了 MediaSession,我无法再控制我的应用程序了。

有没有办法做到这一点?直接监听按钮点击onKeyDown似乎不起作用。

0 投票
1 回答
251 浏览

java - 未能捕捉到 android.intent.action.MEDIA_BUTTON

我使用 TextToSpeech 阅读一些文本的应用程序完成了 90%,但已经在这部分停留了几天。我想要的只是让我的蓝牙耳机(小米的 Mi 运动蓝牙耳机)的播放/暂停按钮来播放/暂停 TextToSpeech。我认为这是我需要捕捉的 android.intent.action.MEDIA_BUTTON ,所以我添加了这些:

在 AndroidManifest.xml 中:

然后是 ButtonReceiver.java 类

调试文本不显示。虽然如果我更改 <action android:name="android.intent.action.MEDIA_BUTTON"/> <action android:name="android.media.VOLUME_CHANGED_ACTION"/>,当我按下耳机的音量增大或减小时它会显示文本,但这并不是我想要的。我只希望应用程序响应播放/暂停按钮。

然后我读到我需要使用registerMediaButtonEventReceiver,所以我尝试在我的 MainActivity.java 中添加它:

还是行不通。此外,它说不registerMediaButtonEventReceiver推荐使用,所以我想知道这是否是它不起作用的原因。

官方文档页面进一步阅读,它告诉我们:

如果您运行的是 Android 5.0(API 级别 21)或更高版本,请调用 FLAG_HANDLES_MEDIA_BUTTONS MediaBrowserCompat.ConnectionCallback.onConnected。这将自动调用您的媒体控制器的 dispatchMediaButtonEvent(),它将键代码转换为媒体会话回调。

我觉得这很愚蠢,因为我不需要这个额外的模块来播放媒体。我只需要检测耳机按钮按下。无论如何,我尝试实现 MediaSession 但很快就放弃了,因为我的应用程序不是音频播放器应用程序,所以很快就结束了太多对我的应用程序无用的代码!

有什么建议吗?我应该怎么办?