检查 iOS 是否正在播放音乐 ("Is button in control center Pause?")
Check if iOS is playing music ("Is button in control center Pause?")
如果用户正在播放任何音乐,我想检查我的应用程序。基本上我想知道控制中心的按钮是否显示暂停而不是播放(从那时起 phone 正在播放一些音乐)。我不想使用 here 的解决方案,因为在通话时也是如此。
找到了两种方法,但是这两种方法都需要 Springboard。由于应用程序和工具位于沙箱中,因此这些解决方案只能用于挂接到 Springboard 的 Tweak!
第一个:
@interface SBMediaController : NSObject
+ (id)sharedInstance;
- (BOOL)isPlaying;
@end
bool isMusicPlaying = [[%c(SBMediaController) sharedInstance] isPlaying]; // this is always false if not hooked into Springboard!
第二个(这个解决方案是异步的):
#import <MediaRemote/MediaRemote.h> // also add MediaRemote to your XXX_PRIVATE_FRAMEWORKS
MRMediaRemoteGetNowPlayingInfo(dispatch_get_main_queue(), ^(CFDictionaryRef information) {
NSDictionary *dict=(__bridge NSDictionary *)(information);
if( dict != NULL && [dict objectForKey:(__bridge NSString *)kMRMediaRemoteNowPlayingInfoPlaybackRate] != NULL ){
float rate = [[dict objectForKey:(__bridge NSString *)kMRMediaRemoteNowPlayingInfoPlaybackRate] floatValue];
NSLog(@"playbackRate %f", rate);
bool isMusicPlaying = rate > 0.0;
}
});
如果用户正在播放任何音乐,我想检查我的应用程序。基本上我想知道控制中心的按钮是否显示暂停而不是播放(从那时起 phone 正在播放一些音乐)。我不想使用 here 的解决方案,因为在通话时也是如此。
找到了两种方法,但是这两种方法都需要 Springboard。由于应用程序和工具位于沙箱中,因此这些解决方案只能用于挂接到 Springboard 的 Tweak!
第一个:
@interface SBMediaController : NSObject
+ (id)sharedInstance;
- (BOOL)isPlaying;
@end
bool isMusicPlaying = [[%c(SBMediaController) sharedInstance] isPlaying]; // this is always false if not hooked into Springboard!
第二个(这个解决方案是异步的):
#import <MediaRemote/MediaRemote.h> // also add MediaRemote to your XXX_PRIVATE_FRAMEWORKS
MRMediaRemoteGetNowPlayingInfo(dispatch_get_main_queue(), ^(CFDictionaryRef information) {
NSDictionary *dict=(__bridge NSDictionary *)(information);
if( dict != NULL && [dict objectForKey:(__bridge NSString *)kMRMediaRemoteNowPlayingInfoPlaybackRate] != NULL ){
float rate = [[dict objectForKey:(__bridge NSString *)kMRMediaRemoteNowPlayingInfoPlaybackRate] floatValue];
NSLog(@"playbackRate %f", rate);
bool isMusicPlaying = rate > 0.0;
}
});