iphone - 在应用程序运行时阻止 Iphone iOS 中的调用和短信

标签 iphone ios objective-c

在使用应用程序时,我想阻止所有来电和短信。我怎样才能做到这一点?我知道示例链接 http://tech.ruimaninfo.com/?p=83 .但是代码有错误。至少在越狱的iphone上应该可以。

最佳答案

下面是我从该网站改编的一些代码,适用于我的非越狱设备:

首先将“CoreTelephony.framework”添加到您的项目中,然后像这样将其导入到您的 View Controller 中:

#import <CoreTelephony/CoreTelephonyDefines.h>

接下来,添加以下代码:

extern NSString const *kCTSMSMessageReceivedNotification;
extern NSString const *kCTSMSMessageReplaceReceivedNotification;
extern NSString const *kCTSIMSupportSIMStatusNotInserted;
extern NSString const *kCTSIMSupportSIMStatusReady;

typedef struct __CTCall CTCall;
extern NSString *CTCallCopyAddress(void*, CTCall *);

void * CTSMSMessageSend(id server,id msg);
typedef struct __CTSMSMessage CTSMSMessage;
NSString *CTSMSMessageCopyAddress(void *, CTSMSMessage *);
NSString *CTSMSMessageCopyText(void *, CTSMSMessage *);

int CTSMSMessageGetRecordIdentifier(void * msg);
NSString * CTSIMSupportGetSIMStatus();
NSString * CTSIMSupportCopyMobileSubscriberIdentity();

id CTSMSMessageCreate(void* unknow/*always 0*/,NSString* number,NSString* text);
void * CTSMSMessageCreateReply(void* unknow/*always 0*/,void * forwardTo,NSString *text);

id CTTelephonyCenterGetDefault(void);
void CTTelephonyCenterAddObserver(id, id, CFNotificationCallback, NSString *, void *,int);
void CTTelephonyCenterRemoveObserver(id,id,NSString*,void*);
int CTSMSMessageGetUnreadCount(void);

void * CTCallDisconnect(CTCall *call);

static void callback(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) {

    NSString *notifyname = (__bridge NSString *)name;

    if ([notifyname isEqualToString:@"kCTCallIdentificationChangeNotification"]) {

        NSDictionary *info = (__bridge NSDictionary *)userInfo;

        CTCall *call = (__bridge CTCall *)[info objectForKey:@"kCTCall"];

        NSString *caller = CTCallCopyAddress(NULL, call);

        NSLog(@"RECEIVED CALL: %@", caller);

        CTCallDisconnect(call);

    }

}

static void signalHandler(int sigraised) {

    printf("\nInterrupted.\n");
    exit(0);

}

然后在 viewDidLoad 或其他一些适当的方法中,添加以下内容:

id ct = CTTelephonyCenterGetDefault();
CTTelephonyCenterAddObserver(ct, NULL, callback, NULL, NULL, CFNotificationSuspensionBehaviorHold);

sig_t oldHandler = signal(SIGINT, signalHandler);
if (oldHandler == SIG_ERR) {

    printf("Could not establish new signal handler");
    exit(1);

}

printf("Starting run loop and watching for notification.\n");
CFRunLoopRun();

目前这段代码只是一个概念证明,必须在错误处理和诸如此类的东西的基础上进行扩展,但你应该明白了。

关于iphone - 在应用程序运行时阻止 Iphone iOS 中的调用和短信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14692551/

相关文章:

iPhone 和 iPad 应用程序具有不同的 UI 但名称相同

iphone - iPhone 游戏可以在线玩吗?

iphone - 当使用泄漏进行分析时,NSURLConnection 会吸收内存

objective-c - 托管对象上下文仅保存托管对象循环的最后一条记录

objective-c - 当应用程序在 iOS 8 中启动时,如果设备处于横向方向,如何强制纵向方向

ios - 通过 segue 传递数据

iphone - 我应该在哪里展示模态视图 Controller ?

ios - tableView 项目上的 Thread1 :EXC_BAD_instruction(code=exc_i386_invop, 子代码=0*0)

javascript - 在 tableViewRow 中交换图像

ios - 嵌入 UIViewController 的子容器的自动布局