Saturday, 10 October 2015

New version 0.9.3.8. Get playing song info from your app!

Hi guys,
I've added a new feature especially useful for advanced users.
There's a new available Intent action.
"com.cav.foobar2000controller.GET_PLAYING_SONG"

It will allow you to get the current song info via Intent without havng to care about http requests or foobar2000 HTTP Control API.

Unlike previous Intent actions, this one is a bit more complicated to work with, but it's actually fairly easy.

You'll need to send a broadcast specifying a callback Intent action string for me to send you back the information in form of JSON-like string.
Here's an example:

Sending the Broadcast
// Create a Bundle with the action you want to be called from foobar2000 controller
Bundle extras = new Bundle();

// This is mandatory! The key MUST BE "callbackAction". The action "com.mybroadcast.song_info" can be any of your choice
extras.putString("callbackAction", "com.mybroadcast.song_info");

// Create a new Intent. Set the new action and add the extras.
Intent intent = new Intent();
intent.setAction("com.cav.foobar2000controller.GET_PLAYING_SONG");
intent.putExtras(extras);

// Send the Broadcast. foobar2000 controller will receive it and send you back a Broadcast with the song information
sendBroadcast(intent);
 Receiving the information
// You need to have a BroadcastReceiver. It can be a custom class of yours.
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
if (extras != null) {
// This is where the song info is stored.
// It will be like: {"title":"Song title", "artist":"Song artist", "album":"Song album", "length": 123, "rating":5}
// You can convert it to JSONObject (or any other implementation)
String song = extras.getString("song");
// Do whatever you want with the retrieved song.
Toast.makeText(MainActivity.this, song, Toast.LENGTH_LONG).show();
}
}
};
// Register the receiver with the action you've provided before
registerReceiver(broadcastReceiver, new IntentFilter("com.mybroadcast.song_info"));
Here's a full Android studio project example using this new Intent action;
https://www.dropbox.com/s/vyuuiyjlgwkavcs/SendBroadcastTest.zip?dl=1

Enjoy!

2 comments:

  1. In the new version of the controller does not connect to the server.

    ReplyDelete
  2. Hi
    The app is very good but I have an issue with it on my Nexus 5 and 7. When I select an album from the library to play, if I navigate away from the app and then BACK to it, the folder view shifts up from the album to its artist, thus adding all of the artist's albums to the playlist. Consequently, at the end of an album, rather than foobar stop playing, it goes on to the next album in line. How do I stop this from happening?
    In addition, the app needs to have a Sort By disc number function. At present it messes up the track order with multi disc albums.
    Many thanks, Robert.

    ReplyDelete