2016-03-09 3 views
2

Я делаю приложение Bluetooth-чат, в котором я использую рамки подключения multipeer и я должен использовать звуковое оповещение, а также появится сообщение с notification-Как сделать звуковое оповещение при получении сообщения с использованием соединения с помощью протокола multipeer?

#import "MCManager.h" 
#include <AudioToolbox/AudioToolbox.h> 
#import "AppDelegate.h" 

@implementation MCManager 
-(id)init{ 
    self = [super init]; 

    if (self) { 
     _peerID = nil; 
     _session = nil; 
     _browser = nil; 
     _advertiser = nil; 
    } 

    return self; 
} 


#pragma mark - Public method implementation 

-(void)setupPeerAndSessionWithDisplayName:(NSString *)displayName 
{ 
    _peerID = [[MCPeerID alloc] initWithDisplayName:displayName]; 

    _session = [[MCSession alloc] initWithPeer:_peerID]; 
    _session.delegate = self; 
} 


-(void)setupMCBrowser{ 
    _browser = [[MCBrowserViewController alloc] initWithServiceType:@"chat-files" session:_session]; 
} 


-(void)advertiseSelf:(BOOL)shouldAdvertise 
{ 
    if (shouldAdvertise) 
    { 
     _advertiser = [[MCAdvertiserAssistant alloc] initWithServiceType:@"chat-files" 
                  discoveryInfo:nil 
                   session:_session]; 
     [_advertiser start]; 
    } 
    else 
    { 
     [_advertiser stop]; 
     _advertiser = nil; 
    } 
} 


#pragma mark - MCSession Delegate method implementation 


-(void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state{ 
    NSDictionary *dict = @{@"peerID": peerID, 
          @"state" : [NSNumber numberWithInt:state] 
          }; 

    [[NSNotificationCenter defaultCenter] postNotificationName:@"MCDidChangeStateNotification" 
                 object:nil 
                 userInfo:dict]; 
} 


-(void)session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID{ 
    NSDictionary *dict = @{@"data": data, 
          @"peerID": peerID 
          }; 

    [[NSNotificationCenter defaultCenter] postNotificationName:@"MCDidReceiveDataNotification" 
                 object:nil 
                 userInfo:dict]; 

     SystemSoundID soundID; 
    CFBundleRef mainBundle = CFBundleGetMainBundle(); 
    CFURLRef ref = CFBundleCopyResourceURL(mainBundle, (CFStringRef)@"Voicemail.wav", NULL, NULL); 
    AudioServicesCreateSystemSoundID(ref, &soundID); 
    AudioServicesPlaySystemSound(soundID); 
} 


-(void)session:(MCSession *)session didStartReceivingResourceWithName:(NSString *)resourceName fromPeer:(MCPeerID *)peerID withProgress:(NSProgress *)progress{ 

    NSDictionary *dict = @{@"resourceName" : resourceName, 
          @"peerID"  : peerID, 
          @"progress"  : progress 
          }; 

    [[NSNotificationCenter defaultCenter] postNotificationName:@"MCDidStartReceivingResourceNotification" 
                 object:nil 
                 userInfo:dict]; 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     [progress addObserver:self 
        forKeyPath:@"fractionCompleted" 
         options:NSKeyValueObservingOptionNew 
         context:nil]; 
    }); 
} 


-(void)session:(MCSession *)session didFinishReceivingResourceWithName:(NSString *)resourceName fromPeer:(MCPeerID *)peerID atURL:(NSURL *)localURL withError:(NSError *)error{ 

    NSDictionary *dict = @{@"resourceName" : resourceName, 
          @"peerID"  : peerID, 
          @"localURL"  : localURL 
          }; 

    [[NSNotificationCenter defaultCenter] postNotificationName:@"didFinishReceivingResourceNotification" 
                 object:nil 
                 userInfo:dict]; 

} 


-(void)session:(MCSession *)session didReceiveStream:(NSInputStream *)stream withName:(NSString *)streamName fromPeer:(MCPeerID *)peerID 
{ 

} 


-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{ 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"MCReceivingProgressNotification" 
                 object:nil 
                 userInfo:@{@"progress": (NSProgress *)object}]; 
} 

@end 

Я пишу этот код в didReceiveData уведомить звук, когда получает данные, но не работает. Я отправляю сообщение, но не получаю звукового уведомления. Пожалуйста, помогите мне, я застрял в этой проблеме за последние 10 дней. Благодаря

ответ

0

Попробуйте это:

NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"Voicemail" ofType:@"wav"]; 
SystemSoundID soundID; 
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath: soundPath], &soundID); 
AudioServicesPlaySystemSound (soundID); 
+0

спасибо, что работает @AncAinu –

+0

@AayushKatiyar Если это работает, вы можете проверить мой ответ как действительный? – AncAinu

0

вы должны передать свой звук имя файла в полезной нагрузке, в противном случае default.mp3 тонального сигнала оповещения по умолчанию.

 Смежные вопросы

  • Нет связанных вопросов^_^