Skip to content

Instantly share code, notes, and snippets.

@neilbantoc
Last active August 29, 2015 14:04
Show Gist options
  • Save neilbantoc/5aabc2aa471ba5440a9f to your computer and use it in GitHub Desktop.
Save neilbantoc/5aabc2aa471ba5440a9f to your computer and use it in GitHub Desktop.
Lockscreen Remote Controls for Media Player
private Song mSong;
private RemoteControlClient remoteControlClient;
private AudioManager audioManager;
// ...
private void broadcastTrackInfoToLockscreen(){
MetadataEditor editor = remoteControlClient.editMetadata(false);
editor.putString(MediaMetadataRetriever.METADATA_KEY_ALBUM, mSong.getFullAlbumTitle());
editor.putString(MediaMetadataRetriever.METADATA_KEY_ARTIST, mSong.getArtistName());
editor.putString(MediaMetadataRetriever.METADATA_KEY_TITLE, mSong.getFullTitle());
editor.putLong(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER, Long.parseLong(mSong.getTrackNumber()));
editor.apply();
}
@SuppressLint("NewApi")
private void setUpRemoteControlClient() {
ComponentName myEventReceiver = new ComponentName(getPackageName(), MediaControlReceiver.class.getName());
audioManager.registerMediaButtonEventReceiver(myEventReceiver);
if (remoteControlClient == null) {
Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
mediaButtonIntent.setComponent(myEventReceiver);
PendingIntent mediaPendingIntent = PendingIntent.getBroadcast(this, 0, mediaButtonIntent, 0);
// create and register the remote control client
remoteControlClient = new RemoteControlClient(mediaPendingIntent);
}
remoteControlClient.setTransportControlFlags(
RemoteControlClient.FLAG_KEY_MEDIA_PLAY |
RemoteControlClient.FLAG_KEY_MEDIA_PAUSE |
RemoteControlClient.FLAG_KEY_MEDIA_PREVIOUS |
RemoteControlClient.FLAG_KEY_MEDIA_NEXT |
RemoteControlClient.FLAG_KEY_MEDIA_STOP);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
remoteControlClient.setPlaybackPositionUpdateListener(new OnPlaybackPositionUpdateListener() {
@Override
public void onPlaybackPositionUpdate(long newPositionMs) {
mPlayer.seekTo((int) newPositionMs);
}
});
remoteControlClient.setOnGetPlaybackPositionListener(new OnGetPlaybackPositionListener() {
@Override
public long onGetPlaybackPosition() {
return mPlayer.getCurrentPosition();
}
});
}
audioManager.registerRemoteControlClient(remoteControlClient);
}
public void updateState(boolean isPlaying) {
if (remoteControlClient != null) {
if (isPlaying) {
remoteControlClient
.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING);
} else {
remoteControlClient
.setPlaybackState(RemoteControlClient.PLAYSTATE_PAUSED);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment