【问题标题】:Android - How to get changes is MediaSession of other applications?Android - 如何更改其他应用程序的 MediaSession?
【发布时间】:2017-09-26 19:54:04
【问题描述】:

我正在尝试开发一个应用程序来获取正在播放音乐/视频的其他应用程序的元数据。现在,我专注于 Youtube Android 应用程序。我认为 MusixMatch 做到了,所以它一定是可能的。据我所知,MusixMatch 会监听 Youtube 的 MediaSession 的任何更改以检索元数据。我的问题是怎么做?

这是我迄今为止尝试过的。

  1. 设置MediaBrowserService
  2. MediaBrowserService 上设置回调
  3. 在服务上设置令牌。

但我仍然很困惑。该服务应该能够在后面触发,即使应用程序已经死亡。这意味着我不会手动将服务绑定到任何东西。那么......它究竟是如何被触发的?我尝试添加intent-filters,但我尝试过的那些都不起作用。

这是我尝试过的intent-filters 列表...我尝试了一堆,因为没有一个有效。

 <receiver
        android:name=".broadcastReceiver.YoutubeReceiver"
        android:enabled="@bool/youtubeBroadcast"
        android:exported="@bool/youtubeBroadcast"
        tools:ignore="ExportedReceiver">
        <intent-filter>

             <action android:name="com.android.youtube.metachanged"/>
             <action android:name="com.google.android.youtube.onPlaybackStateChanged"/>
             <action android:name="com.google.android.youtube.onplaybackstatechanged"/>
             <action android:name="com.google.android.youtube.player.YouTubePlayer.OnInitializedListener"/>
             <action android:name="com.google.android.youtube.player.YouTubePlayer.PlaybackEventListener"/>
             <action android:name="com.google.android.youtube.player.YouTubePlayer.OnFullscreenListener"/>
             <action android:name="com.google.android.youtube.player.YouTubePlayer.PlayerStateChangeListener"/>

       </intent-filter>
</receiver>

【问题讨论】:

  • 您是否已将您的接收器标记为 android:exported="true"?您应该从问题中的清单中编写整个接收器对象,而不仅仅是操作
  • 我不认为that would be a problem,因为android:exported=true 默认
  • 太棒了。那么祝你好运
  • @Dan , 能否获得其他应用播放的媒体元数据?

标签: android youtube android-service mediacontroller android-mediasession


【解决方案1】:

我认为没有办法做到这一点。如果可能的话,这将是一个相当大的安全问题,尤其是在没有获得任何关键许可的情况下。

至于 Musixmatch,我相信他们只是在阅读您的音乐应用程序的通知标题(这是您在第一次运行应用程序时同意的内容),然后猜测正在播放的歌曲。这也是从其他应用播放媒体时歌词不同步的原因。

编辑:这可能值得一试https://developer.android.com/reference/android/media/session/MediaSessionManager#addOnActiveSessionsChangedListener(android.media.session.MediaSessionManager.OnActiveSessionsChangedListener,%2520android.content.ComponentName)

【讨论】:

  • 你在编辑中说的是他们正在使用的,它需要有通知权限。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-27
相关资源
最近更新 更多