2

I am trying to develop an app/widget for which I need display the currently playing information (metadata) of an audio track.

This would be trivial if I was also writing the MediaPlayer myself, as I could simply access the MediaStore and bring up the info, however, I do not wish to compete with the plethora of existing apps on this front. I want to be able to pull this inforrmation from the builtin audio player or other app such as SongBird or PowerAMP.

I should be able to do this with PowerAMP using their [API][1], but have, but I really want a solution that works for the stock android player and others too.

I was hoping to be able to grab the information from the AudioManager, but that seems only to allow me to query the current state (Music is playing et) and I can set my intent to play music, etc... But no access to metadata from someone elses app.

So my thought is this cannot be done easily. My thoughts are that I could maybe access this info from the info bar at the top as the now playing info is printed up there. It might be an ugly hack though...

For a moment I got excited about the RemoteControlClient.MetadataEditor from 4.0, but then I figured out that it was for writing that information to a stream that can be sent to the physical remote, rather than allowing you to create a software remote. Damn!

Does anyone have any ideas?

[1]: http://forum.powerampapp.com/index.php?/topic/1034-updated-for-20-poweramp-api-lib-and-sample-applications/ Power AMP

davient
  • 120
  • 1
  • 7

3 Answers3

2

I've written a guide for implementing this.

Basically, you need to have access to hidden classes of android.jar library. Then you have to extend IRemoteControlDisplay$Stub class, and implement it's methods. After that you register your RemoteControlDisplay with hidden method - AudioManager#registerRemoteControlDisplay. There is just way too much to explain in one answer, so read my guide on XDA-Developers. Here is the link: http://forum.xda-developers.com/showpost.php?p=44513199

Also, I'm currently working on a library which will simplify the process of implementing you remote media controls.

  • Does the underlying architecture still use IRemoteControlDisplay with the new MediaSessionCompat libraries and classes? – JoshuaTree Jun 26 '17 at 10:27
  • 1
    Hi Joshua, yes, basically, my technique is deprecated. Since Android 5.0 you can use MediaController to control playback. – Alexander Woodblock Jun 26 '17 at 10:27
  • Yes but I don't like the way Media Session Compat is working. I am looking for a way to set lock screen meta data without running the notification process for media controller. – JoshuaTree Jun 26 '17 at 10:32
1

I should be able to do this with PowerAMP using their [API][1], but have, but I really want a solution that works for the stock android player and others too.

There is no documented and supported API for the AOSP Music app or the Google Play Music app, AFAIK. They certainly are not in the Android SDK.

I am not aware of an Android ecosystem standard for media players exposing this information, let alone a roster of apps that support such a standard. You are welcome to work with the developers of such apps and encourage them to create and adopt a standard.

My thoughts are that I could maybe access this info from the info bar at the top as the now playing info is printed up there.

It is not possible to spy on other applications' Notifications, for obvious privacy and security reasons.

CommonsWare
  • 986,068
  • 189
  • 2,389
  • 2,491
  • Dangit, I figured as much, I guess I'll be making it work with power amp, and then seeing how many devs I can convince to add the functionality. As you say if I can set up a uniform standard that would be even better :) I hadn't thought of the privacy implications of looking at the notifications. Shame on me! – davient Apr 26 '12 at 07:18
1

For a moment I got excited about the RemoteControlClient.MetadataEditor from 4.0, but then I figured out that it was for writing that information to a stream that can be sent to the physical remote, rather than allowing you to create a software remote. Damn!

Surely there's a way to access the Remote Control Client metadata on Android 4.0, because the lock screen is able to access it when media is playing.

I'm not a developer at all, but I've tried to do a bit of poking around in the AOKP sources and this is my limited understanding of how it works. At least in AOKP (and presumably AOSP as well, then), it appears that the lockscreen uses core/java/com/android/internal/widget/TransportControlView.java to draw the music control widget on the lockscreen, which in turn uses media/java/android/media/IRemoteControlDisplay.aidl for data retrieval. At the very least, it may be useful to poke around in TransportControlView.java to see if you can figure out how the lockscreen widget works.

dirtdigger
  • 11
  • 1