android - Android 在哪里解释媒体按钮?

标签 android android-mediaplayer

Android 在哪里将物理媒体按钮(在耳机线中)转换为逻辑操作(如 NEXT、STOP、SPEECH QUERY)?

有没有办法改变这个分配(即从中创建其他 Action )?

注意:我试图安装一个 MediaButtonReceiver。但它只能看到解释过的 key 。所以我只看到按键,在按键释放得足够早之后不会触发 SPEECH QUERY。

更新:只要我的应用程序处于前台,我就会在 onDispatchKeyEvent 中看到我需要的原始键事件。但是如何在锁定屏幕处于 Activity 状态时获取它们?

MediaButtonReceiver 在应用程序处于后台时被调用(但仅在释放 key 之后)。

最佳答案

在您的应用开始播放任何音频之前,它应该保持将要使用的流的音频焦点。这是通过调用 requestAudioFocus() 完成的,如果您的请求成功,它会返回 AUDIOFOCUS_REQUEST_GRANTED。

您必须指定您正在使用的流以及您是否希望需要 transient 或永久音频焦点。

// Request audio focus for playback
int result = am.requestAudioFocus(afChangeListener,
                         // Use the music stream.
                         AudioManager.STREAM_MUSIC,
                         // Request permanent focus.
                         AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);

if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
// Start playback.
}

查看更多information .

要在您的应用程序中使用实时事件,RTP 是必经之路。它为 RTP(实时传输协议(protocol))提供 API,allowing管理点播或交互式数据流的应用程序。

关于android - Android 在哪里解释媒体按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37235642/

相关文章:

android - 如何为媒体播放器使用 Intent ?

java - (Android Media Player) 为什么不能使用prepareAsync()而不是prepre()与AsyncTask

java - 安卓/Java : Time calculations

android - 将 imageView 高度设置为其父级的 3/4

Android APK 安装多个图标/Activity ?

android - 移除灰度 TabWidget 边框/边缘

android - Handler.postDelayed(...) 不会延迟 Runnable

android - 在 Android 11 (R) 上获取专辑封面

java - 在 Android 中使用 MediaPlayer 播放 mp3 文件列表

android - "adb pull"抛出 "does not exist"