3

私は脱獄微調整開発シーンに不慣れです。「フック」する適切な方法を見つけようとしているので、着信呼び出しをインターセプトできます(そして、いくつかのコードを実行できます)。

CoreTelephony フレームワークのヘッダー ファイルをダンプしましたが、明らかにフックできるメソッドはないようです。私が試してみました:

- (void)broadcastCallStateChangesIfNeededWithFailureLogMessage:(id)arg1;
- (BOOL)setUpServerConnection;

しかし、どちらも機能していません。つまり、iPhone に電話がかかってきたときに電話を受けるということです。

フックする適切な方法に関するポインタはありますか? ありがとう :)

注: これは、プライベート API を使用した脱獄の調整になるため、App Store には送信されません。

4

2 に答える 2

2

私はあなたのコードをテストしませんでしたが、あなたの問題は、コアテレフォニー通知センターを使用してそのイベントに登録する必要があることだと思います(コメントのコードにあったものではありません)。このようなもの:

// register for all Core Telephony notifications
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)
{
    NSString *notifyname = (NSString*)name;
    if ([notifyname isEqualToString:@"kCTCallIdentificationChangeNotification"])
    {
        NSDictionary* info = (NSDictionary*)userInfo;
        CTCall* call = (CTCall*)[info objectForKey:@"kCTCall"];
        NSString* caller = CTCallCopyAddress(NULL, call);

        if (call.callState == CTCallStateDisconnected)
        {
            NSLog(@"Call has been disconnected");
        }
        else if (call.callState == CTCallStateConnected)
        {
            NSLog(@"Call has just been connected");
        }
        else if (call.callState == CTCallStateIncoming)
        {
            NSLog(@"Call is incoming");
        }
        else if (call.callState == CTCallStateDialing)
        {
            NSLog(@"Call is Dialing");
        }
        else
        {
            NSLog(@"None of the conditions");
        }
    }
}

私はここでこの同様の質問で別のテクニックを提供します。UIApplicationまた、バックグラウンドに置かれた通知を受け取らないことについてのその質問の私のコメントに注意してください。

更新:kCTCallStatus iOS6での代わりに使用することについての以下のcud_programmerのコメントを参照してくださいkCTCall

于 2013-02-08T03:51:50.530 に答える
0

出来ますか?

はい。

コンピューター エンジニアリングのバックグラウンドも、携帯電話基地局の仕組みに関するノウハウも持たない普通の人に、このようなことができるでしょうか?

いいえ。

技術的には、これを行うためにルーターのようなものを購入できますが、これは安くはなく、違法であり、ネットワークに干渉するため、携帯電話会社が実際にそれらを追跡できます. ですから、政府機関や国際スパイ以外は、何も心配する必要はないと思います。しかし、政府がまさにあなたが心配していることである場合、申し訳ありませんが、彼らは電話を傍受するだけでなく、さらに多くのことを行っています.

于 2021-12-30T09:34:38.553 に答える