服务不接收多媒体按钮单击事件

2023-12-02

我正在制作一个应用程序,当我按下多媒体按钮时,它应该执行一些操作。我知道我必须创建一个服务并捕获那里的所有事件。我执行了文档建议的所有操作,但我仍然没有在应用程序中收到单击事件。

我遵循以下准则来编写类似的应用程序:https://developer.android.com/guide/topics/media-apps/mediabuttons https://developer.android.com/reference/androidx/media/session/MediaButtonReceiver.html https://code.tutsplus.com/tutorials/create-a-music-player-on-android-song-playback--mobile-22778?_ga=2.241321730.1029380229.1566994251-780734199.1565702660 https://habr.com/ru/post/339416/但我还是没明白这个事件。 我将所有代码放入存储库中:https://gitlab.com/ICaxapI/mediaretranslator/tree/master/app/src/main

以及...以下是我已经遵循的一些建议: 在 AndroidManifest ->

<receiver android:name="androidx.media.session.MediaButtonReceiver">
            <intent-filter>
                <action android:name="android.intent.action.MEDIA_BUTTON" />
            </intent-filter>
        </receiver>
...
        <service android:name="ru.exsoft.mediaretranslator.RetranslatorService">
            <intent-filter>
                <action android:name="android.intent.action.MEDIA_BUTTON" />
            </intent-filter>
        </service>

在服务类中:

override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
        MediaButtonReceiver.handleIntent(mediaSession, intent)
        return START_STICKY
    }

 override fun onCreate() {
        val stateBuilder: Builder = Builder().setActions(ACTION_PLAY or ACTION_STOP or ACTION_PAUSE or ACTION_PLAY_PAUSE or ACTION_SKIP_TO_NEXT or ACTION_SKIP_TO_PREVIOUS)
        ...
        mediaSession!!.setCallback(mediaSessionCallback)
        mediaSession!!.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS or MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS)
        val state =  PlaybackStateCompat.Builder().setActions(
            ACTION_PLAY or ACTION_PLAY_PAUSE or
                    ACTION_PLAY_FROM_MEDIA_ID or ACTION_PAUSE or
                    ACTION_SKIP_TO_NEXT or ACTION_SKIP_TO_PREVIOUS
        ).setState(STATE_PLAYING, 5, 1.0f, SystemClock.elapsedRealtime())
            .build()
        mediaSession?.setPlaybackState(state!!)
        mediaSession?.isActive = true
        ...
        val notificationBuilder = NotificationCompat.Builder(this, channelId )
        val notification = notificationBuilder.setOngoing(true)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setPriority(PRIORITY_MAX)
            .setCategory(Notification.CATEGORY_SERVICE)
            .build()
        startForeground(1, notification)
    }

以及 GitLab 中的其他内容https://gitlab.com/ICaxapI/mediaretranslator/tree/master/app/src/main

...在 logcat 中,我看到以下几行,确认系统根本没有将我的类视为可以处理此事件的类。 :(

2019-08-29 14:08:44.122 23691-23691/? V/Avrcp_ext: recordKeyDispatched: KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_MEDIA_PAUSE, scanCode=0, metaState=0, flags=0x0, repeatCount=0, eventTime=508419172, downTime=508419172, deviceId=-1, source=0x0 } dispatched to com.vanced.android.youtube
2019-08-29 14:08:44.122 1675-2510/? D/MediaSessionService: Sending KeyEvent { action=ACTION_UP, keyCode=KEYCODE_MEDIA_PAUSE, scanCode=0, metaState=0, flags=0x0, repeatCount=0, eventTime=508419172, downTime=508419172, deviceId=-1, source=0x0 } to the last known PendingIntent PendingIntent{e2b4330: PendingIntentRecord{7ce4b98 com.vanced.android.youtube broadcastIntent}}

我遇到了类似的问题,根本原因是我的媒体会话没有播放音频。尝试在调用 mediaSession?.isActive = true 的行后添加以下内容

        val dummyAudioTrack = AudioTrack(
             AudioManager.STREAM_MUSIC,
             48000,
             AudioFormat.CHANNEL_OUT_STEREO,
             AudioFormat.ENCODING_PCM_16BIT,
             AudioTrack.getMinBufferSize(
                  48000,
                  AudioFormat.CHANNEL_OUT_STEREO,
                  AudioFormat.ENCODING_PCM_16BIT
             ),
             AudioTrack.MODE_STREAM
         )

         dummyAudioTrack.play()

(注意,AudioTrack 已被弃用,我只是还没有时间寻找首选方法)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

服务不接收多媒体按钮单击事件 的相关文章

随机推荐

  • 带有“prompt”的“while”循环永远不会显示任何“console.log”

    我只是想检查我的控制台是否已连接到我的代码 以前它对同一个程序也是如此 但现在它甚至没有加载仅包含标题的基本 HTML 页面 并且在控制台中没有显示任何内容 为什么它会这样 var todos whats up dude var input
  • 查找两列中的所有重复值并生成一个不同的行

    我有一个 df 有两列 IP 地址和用户 ID 我试图确定用户 ID 和 IP 地址的不同值 我知道如何获取每个 IP 的不同用户列表 反之亦然 但不知道我是否希望将它们粉碎成一行以及如何做到这一点 获得我正在寻找的结果的推荐方法是什么 示
  • 检测 Spring 3/Spring Security 2.0.5 中的会话超时

    我有一个在 Spring 3 和 SpringSecurity 2 0 5 下运行的 Web 应用程序 为了向用户展示自上次访问以来对站点的更改 我尝试注册其会话被破坏的时间 因此我注册了org springframework contex
  • 如何捕获 .NET 应用程序中的所有异常/崩溃[重复]

    这个问题在这里已经有答案了 可能的重复 NET 实现 捕获所有异常处理程序 的最佳方法是什么 我有一个 NET 控制台应用程序崩溃并向用户显示一条消息 我所有的代码都在try code catch Exception e code
  • JQuery 自动完成结果格式?

    我有一个由空格分隔的值字符串 我将其返回到 Jquery 调用 但它不会将单词分隔成行 数据应该以字符串 列表还是其他形式返回 默认情况下 它希望结果由换行符分隔 如果您提供由空格分隔的值列表 您将需要提供一个解析函数 该函数将获取返回的数
  • 从继承中覆盖 FOSUserBundle 的模板

    正如标题所示 我正在尝试用我自己的模板自定义 FOSUserBundle 的模板 但这根本不起作用 我尝试了我发现的每篇文章中所述的所有内容 校对了所有内容 清除了缓存数千次 但仍然无法正常工作 与 getParent 捆绑类 应该覆盖 f
  • Webpack + Firebase:禁用 Firebase 解析

    我正在开发一个使用 Webpack 捆绑模块的 Web 应用程序 无论出于何种原因 将 Firebase 引入应用程序都会导致 Webpack 抛出错误 当 Webpack 尝试加载 Firebase 模块时 会发生此错误 如何从 Webp
  • 对并行数组进行排序

    Java 初学者使用旧教科书和首先 Java书籍来解决一些问题 我有三个并行的数组 我需要能够根据用户选择按标题 作者或页数进行排序 我可以使用排序Arrays sort 但我对如何对其他两个数组进行排序以使其与新排序的数组相对应感到困惑
  • Windows 脚本:VBScript、DOS、JS、Python、

    假设您主要是一名 C 语法程序员和 Linux 系统管理员 您的任务是在 Windows 上创建一些简单的自动化任务 监视备份文件 进程监视 您更喜欢用哪种语言编写脚本 那里有大量的 VBS 脚本 使用 VB 语法 但我更喜欢与 C 相关的
  • 切换按钮和切换可见性

    我正在使用这个 jQuery 来隐藏 DIV slider click function help slideToggle wrapper animate opacity 1 0 200 slideToggle 200 function s
  • PHP 条件语句,需要括号吗?

    我正在浏览一个论坛 有人询问他们在网上找到的一个 PHP 文件 代码中有几个这样的地方 if REMOTE ADDR ip no ip else ip getHostByAddr REMOTE ADDR 我一直认为如果条件为真 则需要括号来
  • C# float.ToString 舍入值

    也许我错过了一些东西 但是float ToString 方法对数字进行四舍五入 这让我很头痛 看看下面的小代码 当输入 12345678 作为输入时 调试器中的浮点数是正确的 但输出ToString方法是 12345680 我尝试过的任何格
  • Android Google 地图阿拉伯语标记标题显示空白

    我正在使用适用于 Android 的 Google Maps API v2 并且我已经使用过Marker类向地图片段添加标记 如下所示 map addMarker new MarkerOptions position new LatLng
  • AngularJS 搜索更改事件

    我需要一个像这样的活动 routeChangeSuccess但对于 location search 变量 我正在调用 location search newview 并且需要一种方法来知道它何时发生变化 Thanks 你应该使用 scope
  • 为什么变量名中不允许使用特殊字符?

    为什么编程语言的变量名中不允许使用特殊字符 下划线除外 是否有与计算机体系结构或组织相关的原因 大多数语言都有悠久的历史 使用 ASCII 或 EBCDIC 字符集 这些语言往往具有简单的标识符描述 例如 以 A Z 开头 后跟 A Z 0
  • 返回 Future[(Int,Int)] 而不是 (Future[Int],Future[Int])

    我有以下未来 def f1 Future 1 def f2 Future 2 我需要以下代码来返回Future Int Int val future function that returns a future future flatMap
  • 将 Object.entries 减少为泛型类型

    我在 TypeScript 中有以下函数 它的作用是将枚举转换为数组 function toKeyValList e any return Object entries e reduce acc any val any gt acc pus
  • 整理或删除 git 历史记录以进行发布? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我将公开发布一个项目 希望能找到贡献者 我的项目是另一个活跃且资源丰富的项目 Django 项目模板 的本地克隆 我没有对代码进行任何深入的更改 尽管它现在是一个不同的项目 我当前的 gi
  • WiFi Direct 设备与其他 Android 设备的连接

    我可以将支持 WiFi Direct 的设备连接到任何其他没有 WiFi Direct 功能但支持 WiFi 热点连接的设备吗 WiFi direct 是否使用专用硬件来同时存在于两台设备上 在这种情况下网络发现会起作用吗 有可能的 代码取
  • 服务不接收多媒体按钮单击事件

    我正在制作一个应用程序 当我按下多媒体按钮时 它应该执行一些操作 我知道我必须创建一个服务并捕获那里的所有事件 我执行了文档建议的所有操作 但我仍然没有在应用程序中收到单击事件 我遵循以下准则来编写类似的应用程序 https develop