jailbroken 된 iOS 5 iPhone에서 표준 Darwin 알림과 코어 텔리 노티 알림을 모두 모니터링했습니다.
알림을 보지 못했습니다.은 정말로 원하는 것을 수행합니다.
발신 전화가 시작되지만 끝날 때마다 발신 전화 알림이 몇 가지 있습니다. 그것은 약간의 통지가있을 수 있습니다, 데이터 서비스가 연결될 때처럼 보이지만 다시, 그들은 정말 당신이 무엇을 요구 정확히되지 않습니다
kCTIndicatorRadioTransmitNotification
kCTRegistrationDataStatusChangedNotification
은 당신이 모든 코어 전화 알림을 모니터링하려고 할 경우 자신, 당신은 코어 전화 프레임 워크 및 CT 알림 센터를 사용할 수 있습니다 : 위의 호출에
-(void) registerCallback {
id ct = CTTelephonyCenterGetDefault();
CTTelephonyCenterAddObserver(ct, // center
NULL, // observer
telephonyEventCallback, // callback
NULL, // event name (or all)
NULL, // object
CFNotificationSuspensionBehaviorDeliverImmediately);
}
static void telephonyEventCallback(CFNotificationCenterRef center, void* observer, CFStringRef name, const void* object, CFDictionaryRef userInfo)
{
//NSLog(@"telephonyEventCallback()");
NSString* notifyName = (__bridge NSString*)name;
if ([notifyName isEqualToString:@"kCTMessageReceivedNotification"]) { // received SMS
} /* look for other notification names here */
}
을, 나는 모든 알림을 등록하는 CTTelephonyCenterAddObserver()
전화에 NULL
를 전달합니다. com.apple.iokit.hid.displayStatus
에 게시 한 예와 같이 원하는 것을 알고있는 경우 특정 알림의 이름을 전달할 수 있습니다.이 변경 될 때 john.k.doe's option에 대해서는
이, 당신이 해당 속성에 관찰 키 값을 사용하려고 통지를 얻을 수 있습니다
UIApplication* app = [UIApplication sharedApplication];
[app addObserver: self forKeyPath: @"networkActivityIndicatorVisible" options: NSKeyValueObservingOptionNew context: nil];
당신의 관찰자 콜백입니다 :
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"networkActivityIndicatorVisible"]) {
// process here
NSLog(@"network activity indicator change!");
BOOL active = [UIApplication sharedApplication].networkActivityIndicatorVisible;
}
}
잘 모르겠어요 KVO가 백그라운드에서 계속 작동한다면 앱이 배경을 관리하는 방법에 달려 있습니다.
하지만 물론, 앱이 네트워크에 액세스 할 때 실제로 그 속성을 사용하도록 요구합니다. Apple이 제 3 자 개발자가 제어해야하는 지표를 만들었던 것은 불행한 일입니다. Android 및 BlackBerry에서 OS는 전송/수신 시점을 알기에 충분히 똑똑합니다.
그래서, 이것은 당신이 먼저,이 방법은 동작하지 않습니다! :(필요가 답장을 보내
덕분에 무엇을 부분적으로 만 여전히, 그것은 항상 작은 스피너 상단 우측 회전 경우에도 false를 반환 아마도 응용 프로그램이 백그라운드에서 실행되고 있기 때문일 수 있습니다. 둘째, 네트워크 활동 표시기가이 방법을 확인하면 개발자가 바로 호출 할 수 있습니다. 그렇다면 네트워크가 사용 중이지만 앱 개발자가 회 전자를 시작하지 않으면 여전히 불행히도 John과 내 솔루션 모두 다른 개발자에게이 선택적 API를 사용해야합니다. Apple의 소프트웨어 자체는 사용하기에 꽤 좋지만 다른 타사와도 호환됩니다 (Nate의 옵저버를 사용하여 알림을 얻지는 않습니까?) – Sunkas
@Sunkas, 맞습니다. 개발자는 네트워크 활동을 100 % 알려주지 않습니다. 예. – Nate
@ john.k.doe 귀하의 답변을 주셔서 감사합니다, 나는 모든 네트워크 활동을 모니터하려고했는데, 나는 내 모니터 만해야합니다 ... –