2012-06-26 2 views
2

Моего телефона: IOS 5.1.1 джейлбрейкиутого использования Absynth2IOS 5 - CTCallCenter не работает для меня

То, что я пытаюсь сделать: обнаружения входящего вызова или при поступлении вызова набирается ...

Хорошо вот мой код, который я помещен внутри AppDelegate под didEnterBackground, также пытались в didResignActive - я не получаю никаких ошибок, но я также не получают никаких результатов ..

callCenter = [[CTCallCenter alloc] init]; 
[callCenter setCallEventHandler:^(CTCall *call) { 
    NSDictionary *dict = [NSDictionary dictionaryWithObject:call.callState forKey:@"callState"]; 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"CTCallStateDidChange" object:nil userInfo:dict]; 
    NSLog(@"state changed on call: %@", call); 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callReceived:) name:CTCallStateIncoming object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callEnded:) name:CTCallStateDisconnected object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callConnected:) name:CTCallStateConnected object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callDial:) name:CTCallStateDialing object:nil]; 

любая помощь приветствуется. благодаря!

ответ

5

Проблема в том, что iOS, по-видимому, не передает уведомления в UIApplications в фоновом режиме. Из iOS documentation for CTCallCenter:

Если ваше приложение активируется, когда событие вызова происходит, система отправляет событие обработчика немедленно. Тем не менее, вызовы также могут иметь место, пока ваше приложение приостановлено. Пока приостановлено, ваше приложение не принимает события вызова.

Поскольку вы взломан, почему бы не сделать «приложение» к запуска демона? Затем он может работать все время как услуга. Если вы сделаете это, то следующий код должен получить свои уведомления (я проверил это на взломанной прошивке 5.0.1 iPhone 4):

@property (nonatomic, strong) CTCallCenter* callCenter; 

и зарегистрироваться для получения уведомлений с:

- (void) registerForCalls { 

    self.callCenter = [[CTCallCenter alloc] init]; 
    NSLog(@"registering for call center events"); 
    [callCenter setCallEventHandler: ^(CTCall* call) { 
     if ([call.callState isEqualToString: CTCallStateConnected]) { 

     } else if ([call.callState isEqualToString: CTCallStateDialing]) { 

     } else if ([call.callState isEqualToString: CTCallStateDisconnected]) { 

     } else if ([call.callState isEqualToString: CTCallStateIncoming]) { 

     } 
     NSLog(@"\n\n callEventHandler: %@ \n\n", call.callState); 
    }]; 
} 

Вот good tutorial on how to create Launch Daemons, если вы еще этого не сделали.

Если у вас также есть графический компонент для вашего приложения, вы можете создать две части: демон запуска, который будет запускаться все время, и приложение пользовательского интерфейса, которое запускается при запуске пользователем. При необходимости они могут общаться друг с другом с уведомлениями.

+0

Означает ли это, что если я хочу разработать приложение, которое каждый раз, когда пользователь получает звонок, он отправит смс - он не будет работать? Есть ли другой способ сделать это? – Dejell

+0

@ Odelya, вы строите для App Store, для телефонов с взломанными телефонами или для телефонов, не связанных с джейлбрейком, но вы не отправляетесь в App Store? – Nate

+0

Я строю для AppStore. – Dejell

0

Если вы хотите, чтобы ваше приложение всегда работало в фоновом режиме, вам необходимо сделать приложение приложения Voip. Вы также можете сделать небольшой трюк, который заставляет ваше приложение играть бесконечную бесшумную музыку, когда она идет фон.

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