ジェイルブレイクされたiOS5iPhoneで、標準のダーウィン通知とコアテルフォニー通知の両方を監視しました。
私はあなたが本当に望んでいることをする通知を見ませんでした。
送信されるコアテレフォニー通知がいくつかありますが、すべての送信の開始と終了にあるわけではありません。データサービスが接続すると、いくつかの通知があるように見えますが、繰り返しになりますが、それらは実際にはあなたが要求したものではありません。
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 */
}
上記の呼び出しでは、すべての通知を登録NULL
する呼び出しに渡します。もちろん、投稿した例のように、探しているものがわかっている場合は、特定の通知の名前を渡すことができます。CTTelephonyCenterAddObserver()
com.apple.iokit.hid.displayStatus
john.k.doeのオプションに関しては、そのプロパティでKey Value Observingを使用して、変更されたときに通知を受け取ることができます。
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がその指標をサードパーティの開発者が制御する必要のあるものにさえしたのは残念なことです。AndroidとBlackBerryでは、OSは送信/受信のタイミングを知るのに十分スマートです。
だから、これはまだあなたが必要とするものの一部にすぎません:(