簡體   English   中英

iOS 如何檢查當前是否正在通話

[英]iOS How to check if currently on phone call

我環顧四周,我能找到的只是檢查 CTCallCenter 的 callState。 但是,這是通過偵聽事件來實現的——這取決於應用程序是否處於活動/掛起/恢復狀態,可以在不同時間引發事件。

我需要的不是監聽事件並在呼叫連接時被告知,我想決定自己何時詢問呼叫是否已連接。

用例:當電話接通時 - 用戶知道並將始終單擊應用程序圖標,這將打開應用程序。 此時我只想運行一個快速函數來檢查當前是否在通話中。

這甚至可能嗎?

CTCallCenter對象有一個currentCalls屬性,它是當前調用的NSSet 如果有呼叫,則currentCalls屬性應為 != nil。

如果您想知道是否有任何調用實際上已連接,則必須遍歷當前調用並檢查callState以確定它是否為CTCallStateConnected

#import <CoreTelephony/CTCallCenter.h>
#import <CoreTelephony/CTCall.h>

-(bool)isOnPhoneCall {
    /*

     Returns TRUE/YES if the user is currently on a phone call

     */

    CTCallCenter *callCenter = [[[CTCallCenter alloc] init] autorelease];
    for (CTCall *call in callCenter.currentCalls)  {
        if (call.callState == CTCallStateConnected) {
            return YES;
        }
    }
    return NO;
}

感謝您的回答 ThomasW。 我以為我也會發布代碼。

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    CTCallCenter *ctCallCenter = [[CTCallCenter alloc] init];
    if (ctCallCenter.currentCalls != nil) 
    {
        NSArray* currentCalls = [ctCallCenter.currentCalls allObjects];
        for (CTCall *call in currentCalls)
        {   
            if(call.callState == CTCallStateConnected)
            {
                // connected
            }
        }
    }
}

我遇到了同樣的問題,但我認為從iOS 10執行此操作的正確方法是:

func checkForActiveCall() -> Bool {
    for call in CXCallObserver().calls {
        if call.hasEnded == false {
            return true
        }
    }
    return false
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM