4

この質問をする前にSOを検索しましたが、私のニーズを満たす答えはありません。

これが私の要件です。

着信 SMS を検出するためのこのコードがありますが、これらのメッセージをダンプする方法はわかりません。着信通話を正常にブロックしましたが、メッセージについては、これを行う方法がわかりません。ここで何か助けていただければ幸いです。

プライベート API を使用しても問題ありません。

if ([notifyname isEqualToString:@"kCTSMSMessageReceivedNotification"])
{
    if ([[(NSDictionary *)userInfo allKeys]
         containsObject:@"kCTSMSMessage"]) // SMS Message
    {
        CTSMSMessage *message = (CTSMSMessage *)
        [(NSDictionary *)userInfo objectForKey:@"kCTSMSMessage"];
        NSString *address = CTSMSMessageCopyAddress(NULL, message);
        NSString *text = CTSMSMessageCopyText(NULL, message);
        //NSArray *lines = [text componentsSeparatedByString:@"\n"];
        printf(" %s %s\n", [address UTF8String],[text UTF8String]);
        //printf(" %s\n", [text cString]);
        fflush(stdout);

    }
}
else if ([notifyname isEqualToString:@"kCTMessageReceivedNotification"])//received SMS
{
    /*
     kCTMessageIdKey = "-2147483636″;
     kCTMessageTypeKey = 1;
     */

    NSDictionary *info = (NSDictionary *)userInfo;
    CFNumberRef msgID = (CFNumberRef)[info objectForKey:@"kCTMessageIdKey"];
    int result;
    CFNumberGetValue((CFNumberRef)msgID, kCFNumberSInt32Type, &result); 
    /*
     Class CTMessageCenter = NSClassFromString(@"CTMessageCenter");
     id mc = [CTMessageCenter sharedMessageCenter];
     id incMsg = [mc incomingMessageWithId: result];

     int msgType = (int)[incMsg messageType];

     if (msgType == 1) //experimentally detected number
     {
     id phonenumber = [incMsg sender];

     NSString *senderNumber = (NSString *)[phonenumber canonicalFormat];
     id incMsgPart = [[incMsg items] objectAtIndex:0];
     NSData *smsData = [incMsgPart data];
     NSString *smsText = [[NSString alloc] initWithData:smsData encoding:NSUTF8StringEncoding];
     }
     */
}

ありがとうナヴィーン

4

1 に答える 1

2

あなたは質問が十分に明確ではありません。メッセージアプリ(およびデータベース)に表示されないように完全に削除しますか、それともSpringBoardがユーザーに着信メッセージを通知しないようにしますか?

最初のものについては、コードスニプレットで聞いている通知を実際に送信するプロセスをフックする必要があります。imagent(/System/Library/PrivateFrameworks/IMCore.framework/imagent.app/imagent)をいじくり回す必要があると確信しています。

2つ目は、SpringBoardで遊んでみる必要があります。iOS 5.0 BulletinBoardがユーザーへの通知を処理しているため、そこでブロックすることができます。(おそらく、BulletinBoardプラグインであるSMSBBPluginをチェックしたいと思うでしょう)。

または、選択した逆アセンブラを起動して、biteSMSなどの調整がどのように実行されているかを確認します;)

ジェイルブレイクの微調整の開発には、多くの逆転と調整が必要な場合があり、ほとんどの人は調査結果の大部分を自分自身に保持することを覚えておいてください。

于 2012-04-27T22:46:59.390 に答える