我想在我的应用程序中获取电话状态。
经过一番搜索,我找到了CoreTelephony
框架。但这在 iOS 10 中已被弃用。那么还有其他可用的替代方法吗?
我也发现了CallKit
。iOS 10 中的一个新框架。但没有得到与我搜索相同的调用状态。
6254 次
5 回答
11
import CallKit
进入您的AppDelegate
并添加以下代码:
// AppDelegate
var callObserver: CXCallObserver! // add property
// in applicationDidFinishLaunching...
callObserver = CXCallObserver()
callObserver.setDelegate(self, queue: nil) // nil queue means main thread
extension AppDelegate: CXCallObserverDelegate {
func callObserver(_ callObserver: CXCallObserver, callChanged call: CXCall) {
if call.hasEnded == true {
print("Disconnected")
}
if call.isOutgoing == true && call.hasConnected == false {
print("Dialing")
}
if call.isOutgoing == false && call.hasConnected == false && call.hasEnded == false {
print("Incoming")
}
if call.hasConnected == true && call.hasEnded == false {
print("Connected")
}
}
}
于 2017-03-13T00:26:26.190 回答
7
你可以试试这段代码:
创建呼叫观察者的实例
@property ( nonatomic ) CXCallObserver *callObserver;
启动实例并设置委托
_callObserver = [CXCallObserver new]; [_callObserver setDelegate:self queue:dispatch_get_main_queue()];
添加调用观察者委托
- (void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call{ if (call == nil || call.hasEnded == YES) { NSLog(@"CXCallState : Disconnected"); } if (call.isOutgoing == YES && call.hasConnected == NO) { NSLog(@"CXCallState : Dialing"); } if (call.isOutgoing == NO && call.hasConnected == NO && call.hasEnded == NO && call != nil) { NSLog(@"CXCallState : Incoming"); } if (call.hasConnected == YES && call.hasEnded == NO) { NSLog(@"CXCallState : Connected"); } }
在 Swift 4.2 中:
var callObserver: CXCallObserver()
callObserver.setDelegate(self, queue: DispatchQueue.main)
func callObserver(_ callObserver: CXCallObserver, callChanged call: CXCall) {
if call == nil || call.hasEnded == true {
print("CXCallState : Disconnected")
}
if call.isOutgoing == true && call.hasConnected == false {
print("CXCallState : Dialing")
}
if call.isOutgoing == false && call.hasConnected == false && call.hasEnded == false && call != nil {
print("CXCallState : Incoming")
}
if call.hasConnected == true && call.hasEnded == false {
print("CXCallState : Connected")
}
}
于 2016-11-29T13:28:30.743 回答
2
要获得有关电话状态的通知,从 iOS 10 开始,您应该使用CXCallObserver
类并实现其CXCallObserverDelegate
协议方法,这在此答案中建议:
- (void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call {
if (call.hasConnected) {
// perform necessary actions
}
}
于 2016-10-14T17:04:35.103 回答
1
有一些可用的委托方法可以指示呼入和呼出状态。
于 2016-10-13T12:56:11.437 回答
-3
Apple 不允许您访问这些信息,尽管您可以通过使用第三方库来访问这些信息,但您的应用在提交到 App Store 时会被拒绝,因为 Apple 不允许访问敏感的用户信息。
于 2016-10-13T12:56:03.210 回答