【问题标题】:IOS decline incoming call programmatically?IOS以编程方式拒绝来电?
【发布时间】:2017-02-20 12:07:59
【问题描述】:

有什么方法可以快速以编程方式拒绝来电。我的代码是这样的:

self.callCenter.callEventHandler = {(_ call: CTCall) -> Void in
            if call.callState == CTCallStateDisconnected {
                print("Call has been disconnected")
            }
            else if call.callState == CTCallStateConnected {
                print("Call has just been connected")
            }
            else if call.callState == CTCallStateIncoming {
                print("Call is incoming")
                }
            else {
                print("None of the conditions")
            }

我以这种方式检测来电状态。但我不知道如何更改 callstate 的 CTCAll 。请帮帮我!。

【问题讨论】:

  • 你无法做到这一点。至少对于未越狱的设备而言。
  • 这里有一个objective-c代码:
  • 此代码告诉您电话是否处于通话状态。它不允许您修改状态。想象一下,如果 Apple 允许应用程序这样做会发生什么,人们会创建恶意应用程序,通过断开电话基本上使手机瘫痪。 (始终假设此类应用程序会通过 Apple Review 和 App Process 看门狗将允许它们在后台运行无限时间)。答案是 NO 并且有充分的理由!
  • @NSNoob 仅仅因为你不能提供一个好的理由并不意味着没有一个。希望提供来电显示以及根据他们所做的事情接听/拒绝呼叫的能力的家庭自动化应用程序呢?也许对于那些难以导航在床头柜上使用两个大按钮的触摸界面的残疾人/盲人来说。在回答技术问题时,最好将固执己见/答案留给自己。
  • 除此之外,几乎所有其他系统修改都有一个弹出窗口,询问用户并提供描述性详细信息,他们将使用所述权限做什么。通知、相机、GPS,都使用上述接口。这可以很容易地扩展到 CallKit API。

标签: ios iphone swift swift3


【解决方案1】:
#import <CoreTelephony/CTCall.h>
#import <CoreTelephony/CTCallCenter.h>
#import <CoreTelephony/CTCarrier.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>

@interface MMCallNotificationManager()
@property (nonatomic, strong) CTCallCenter *callCenter;
@property (nonatomic) BOOL callWasStarted;
@end

@implementation MMCallNotificationManager

- (instancetype)init
{
    self = [super init];

    if (self) {

        self.callCenter = [[CTCallCenter alloc] init];
        self.callWasStarted = NO;

        __weak __typeof__(self) weakSelf = self;

        [self.callCenter setCallEventHandler:^(CTCall *call) {

            if ([[call callState] isEqual:CTCallStateIncoming] ||
                [[call callState] isEqual:CTCallStateDialing]) {

                if (weakSelf.callWasStarted == NO) {

                    weakSelf.callWasStarted = YES;

                    NSLog(@"Call was started.");
                }

            } else if ([[call callState] isEqual:CTCallStateDisconnected]) {

                if (weakSelf.callWasStarted == YES)
                {
                    weakSelf.callWasStarted = NO;

                    NSLog(@"Call was ended.");
                }
            }
        }];
    }

    return self;
}

@end

【讨论】:

  • 这根本不会修改通话状态。
  • 同样,这只是告诉您电话是否处于通话状态。它不会让你断开通话
  • 那么有什么办法可以在来电时恢复应用程序。我正在尝试制作视频通话应用程序。我希望来电时不要断开连接。
  • @apache 把它留给用户。 iOS 允许您使用这些状态来处理中断。如果用户不希望视频通话被打断,他将挂断手机通话。如果他想接听蜂窝电话,你的应用应该无法断开它
猜你喜欢
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2010-09-23
  • 1970-01-01
  • 1970-01-01
  • 2014-01-24
  • 1970-01-01
相关资源
最近更新 更多