You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

66 lines
2.1 KiB

#import <Foundation/Foundation.h>
#import <AVFoundation/AVFoundation.h>
void (*gSuspendCallback)(bool suspend);
bool gIsSuspended = false;
extern "C" void RegisterSuspendCallback(void (*callback)(bool))
{
if (!gSuspendCallback)
{
gSuspendCallback = callback;
[[NSNotificationCenter defaultCenter] addObserverForName:AVAudioSessionInterruptionNotification object:nil queue:nil usingBlock:^(NSNotification *notification)
{
bool began = [[notification.userInfo valueForKey:AVAudioSessionInterruptionTypeKey] intValue] == AVAudioSessionInterruptionTypeBegan;
if (began == gIsSuspended)
{
return;
}
if (@available(iOS 10.3, *))
{
if (began && [[notification.userInfo valueForKey:AVAudioSessionInterruptionWasSuspendedKey] boolValue])
{
return;
}
}
gIsSuspended = began;
if (!began)
{
[[AVAudioSession sharedInstance] setActive:TRUE error:nil];
}
if (gSuspendCallback)
{
gSuspendCallback(began);
}
}];
[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidBecomeActiveNotification object:nil queue:nil usingBlock:^(NSNotification *notification)
{
#ifndef TARGET_OS_TV
if (!gIsSuspended)
{
return;
}
#else
if (gSuspendCallback)
{
gSuspendCallback(true);
}
#endif
NSError *errorMessage;
if(![[AVAudioSession sharedInstance] setActive:TRUE error:&errorMessage])
{
NSLog(@"UIApplicationDidBecomeActiveNotification: AVAudioSession.setActive() failed: %@", errorMessage);
return;
}
if (gSuspendCallback)
{
gSuspendCallback(false);
}
gIsSuspended = false;
}];
}
}