/* * Media remote framework header. * * Copyright (c) 2013-2014 Cykey (David Murray) * All rights reserved. */ #ifndef MEDIAREMOTE_H_ #define MEDIAREMOTE_H_ #include #if __cplusplus extern "C" { #endif #pragma mark - Notifications /* * These are used on the local notification center. */ extern CFStringRef kMRMediaRemoteNowPlayingInfoDidChangeNotification; extern CFStringRef kMRMediaRemoteNowPlayingPlaybackQueueDidChangeNotification; extern CFStringRef kMRMediaRemotePickableRoutesDidChangeNotification; extern CFStringRef kMRMediaRemoteNowPlayingApplicationDidChangeNotification; extern CFStringRef kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification; extern CFStringRef kMRMediaRemoteRouteStatusDidChangeNotification; #pragma mark - Keys extern CFStringRef kMRMediaRemoteNowPlayingApplicationPIDUserInfoKey; extern CFStringRef kMRMediaRemoteNowPlayingApplicationIsPlayingUserInfoKey; extern CFStringRef kMRMediaRemoteNowPlayingInfoAlbum; extern CFStringRef kMRMediaRemoteNowPlayingInfoArtist; extern CFStringRef kMRMediaRemoteNowPlayingInfoArtworkData; extern CFStringRef kMRMediaRemoteNowPlayingInfoArtworkMIMEType; extern CFStringRef kMRMediaRemoteNowPlayingInfoChapterNumber; extern CFStringRef kMRMediaRemoteNowPlayingInfoComposer; extern CFStringRef kMRMediaRemoteNowPlayingInfoDuration; extern CFStringRef kMRMediaRemoteNowPlayingInfoElapsedTime; extern CFStringRef kMRMediaRemoteNowPlayingInfoGenre; extern CFStringRef kMRMediaRemoteNowPlayingInfoIsAdvertisement; extern CFStringRef kMRMediaRemoteNowPlayingInfoIsBanned; extern CFStringRef kMRMediaRemoteNowPlayingInfoIsInWishList; extern CFStringRef kMRMediaRemoteNowPlayingInfoIsLiked; extern CFStringRef kMRMediaRemoteNowPlayingInfoIsMusicApp; extern CFStringRef kMRMediaRemoteNowPlayingInfoPlaybackRate; extern CFStringRef kMRMediaRemoteNowPlayingInfoProhibitsSkip; extern CFStringRef kMRMediaRemoteNowPlayingInfoQueueIndex; extern CFStringRef kMRMediaRemoteNowPlayingInfoRadioStationIdentifier; extern CFStringRef kMRMediaRemoteNowPlayingInfoRepeatMode; extern CFStringRef kMRMediaRemoteNowPlayingInfoShuffleMode; extern CFStringRef kMRMediaRemoteNowPlayingInfoStartTime; extern CFStringRef kMRMediaRemoteNowPlayingInfoSupportsFastForward15Seconds; extern CFStringRef kMRMediaRemoteNowPlayingInfoSupportsIsBanned; extern CFStringRef kMRMediaRemoteNowPlayingInfoSupportsIsLiked; extern CFStringRef kMRMediaRemoteNowPlayingInfoSupportsRewind15Seconds; extern CFStringRef kMRMediaRemoteNowPlayingInfoTimestamp; extern CFStringRef kMRMediaRemoteNowPlayingInfoTitle; extern CFStringRef kMRMediaRemoteNowPlayingInfoTotalChapterCount; extern CFStringRef kMRMediaRemoteNowPlayingInfoTotalDiscCount; extern CFStringRef kMRMediaRemoteNowPlayingInfoTotalQueueCount; extern CFStringRef kMRMediaRemoteNowPlayingInfoTotalTrackCount; extern CFStringRef kMRMediaRemoteNowPlayingInfoTrackNumber; extern CFStringRef kMRMediaRemoteNowPlayingInfoUniqueIdentifier; extern CFStringRef kMRMediaRemoteNowPlayingInfoRadioStationIdentifier; extern CFStringRef kMRMediaRemoteNowPlayingInfoRadioStationHash; extern CFStringRef kMRMediaRemoteOptionMediaType; extern CFStringRef kMRMediaRemoteOptionSourceID; extern CFStringRef kMRMediaRemoteOptionTrackID; extern CFStringRef kMRMediaRemoteOptionStationID; extern CFStringRef kMRMediaRemoteOptionStationHash; extern CFStringRef kMRMediaRemoteRouteDescriptionUserInfoKey; extern CFStringRef kMRMediaRemoteRouteStatusUserInfoKey; #pragma mark - API typedef enum { /* * Use nil for userInfo. */ kMRPlay = 0, kMRPause = 1, kMRTogglePlayPause = 2, kMRStop = 3, kMRNextTrack = 4, kMRPreviousTrack = 5, kMRToggleShuffle = 6, kMRToggleRepeat = 7, kMRStartForwardSeek = 8, kMREndForwardSeek = 9, kMRStartBackwardSeek = 10, kMREndBackwardSeek = 11, kMRGoBackFifteenSeconds = 12, kMRSkipFifteenSeconds = 13, /* * Use a NSDictionary for userInfo, which contains three keys: * kMRMediaRemoteOptionTrackID * kMRMediaRemoteOptionStationID * kMRMediaRemoteOptionStationHash */ kMRLikeTrack = 0x6A, kMRBanTrack = 0x6B, kMRAddTrackToWishList = 0x6C, kMRRemoveTrackFromWishList = 0x6D } MRCommand; Boolean MRMediaRemoteSendCommand(MRCommand command, id userInfo); void MRMediaRemoteSetPlaybackSpeed(int speed); void MRMediaRemoteSetElapsedTime(double elapsedTime); void MRMediaRemoteSetNowPlayingApplicationOverrideEnabled(Boolean enabled); void MRMediaRemoteRegisterForNowPlayingNotifications(dispatch_queue_t queue); void MRMediaRemoteUnregisterForNowPlayingNotifications(); void MRMediaRemoteBeginRouteDiscovery(); void MRMediaRemoteEndRouteDiscovery(); CFArrayRef MRMediaRemoteCopyPickableRoutes(); typedef void (^MRMediaRemoteGetNowPlayingInfoCompletion)(CFDictionaryRef information); typedef void (^MRMediaRemoteGetNowPlayingApplicationPIDCompletion)(int PID); typedef void (^MRMediaRemoteGetNowPlayingApplicationIsPlayingCompletion)(Boolean isPlaying); void MRMediaRemoteGetNowPlayingApplicationPID(dispatch_queue_t queue, MRMediaRemoteGetNowPlayingApplicationPIDCompletion completion); void MRMediaRemoteGetNowPlayingInfo(dispatch_queue_t queue, MRMediaRemoteGetNowPlayingInfoCompletion completion); void MRMediaRemoteGetNowPlayingApplicationIsPlaying(dispatch_queue_t queue, MRMediaRemoteGetNowPlayingApplicationIsPlayingCompletion completion); void MRMediaRemoteKeepAlive(); void MRMediaRemoteSetElapsedTime(double time); void MRMediaRemoteSetShuffleMode(int mode); void MRMediaRemoteSetRepeatMode(int mode); /* * The identifier can be obtained using MRMediaRemoteCopyPickableRoutes. * Use the 'RouteUID' or the 'RouteName' key. */ int MRMediaRemoteSelectSourceWithID(CFStringRef identifier); void MRMediaRemoteSetPickedRouteWithPassword(CFStringRef route, CFStringRef password); CFArrayRef MRMediaRemoteCopyPickableRoutesForCategory(NSString *category); Boolean MRMediaRemotePickedRouteHasVolumeControl(); void MRMediaRemoteSetCanBeNowPlayingApplication(Boolean can); void MRMediaRemoteSetNowPlayingInfo(CFDictionaryRef information); #if __cplusplus } #endif #endif /* MEDIAREMOTE_H_ */