質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

1回答

1664閲覧

callkitを使って着信コールを自動切断させることはできますか?

chicchi

総合スコア4

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2020/02/26 22:20

前提・実現したいこと

swiftでcallkitを使ってiPhoneにかかってきた電話を受話せずに○秒後に自動的に切断したい

他言語の開発経験はありますが、swift初心者です。
ネットで探したサンプルコードを元に実装しました。

該当のソースコード

swift5

1import Foundation 2import UIKit 3import CallKit 4 5extension Notification.Name { 6 static let notifyName = Notification.Name("notifyName") 7} 8 9 10class CallKitController: NSObject ,CXCallObserverDelegate{ 11 12 var callObserver = CXCallObserver() 13 private let controller = CXCallController() 14 15 override init() { 16 super.init() 17 callObserver.setDelegate(self, queue: DispatchQueue.main) 18 print("コールキットオブザーバーinit") 19 } 20 21 func callObserver(_ callObserver: CXCallObserver, callChanged call: CXCall) { 22 callStateValue(call: call) 23 } 24 25 func callStateValue(call: CXCall) { 26 27 print("isOutgoing ", call.isOutgoing); 28 print("hasConnected ", call.hasConnected); 29 print("hasEnded ", call.hasEnded); 30 print("isOnHold ", call.isOnHold); 31 32 // 発信 33 if (call.isOutgoing == true && call.hasConnected == false) { 34 print("発信 CXCallState : Dialing"); 35 NotificationCenter.default.post(name: .notifyName, 36 object: nil, 37 userInfo: ["mykind":1] 38 ) 39 } 40 41 // 着信 42 if (call.hasConnected == false && call.hasEnded == false) { 43 print("着信 CXCallState : Incoming"); 44 45 NotificationCenter.default.post(name: .notifyName, 46 object: nil, 47 userInfo: ["mykind":2] 48 ) 49 50 //5秒待って電話を自動で切る 51 Thread.sleep(forTimeInterval: 5.0) 52 endCall(call: call) 53 54 } 55 56 // 受話 57 if (call.hasConnected == true && call.hasEnded == false) { 58 print("受話 CXCallState : Connected"); 59 NotificationCenter.default.post(name: .notifyName, 60 object: nil, 61 userInfo: ["mykind":3] 62 ) 63 } 64 65 // 切断 66 if (call.hasConnected == true && call.hasEnded == true) { 67 print("切断 CXCallState : Disconnected"); 68 NotificationCenter.default.post(name: .notifyName, 69 object: nil, 70 userInfo: ["mykind":4] 71 ) 72 } 73 } 74 75 //電話を切る時の処理 76 func endCall(call: CXCall) { 77 var ret: Int = 5 78 79 let action = CXEndCallAction(call: call.uuid) 80 let transaction = CXTransaction(action: action) 81 controller.request(transaction) { error in 82 if let error = error { 83 print("CXEndCallAction error: (error.localizedDescription)") 84 ret = 6 85 } 86 } 87 88 NotificationCenter.default.post(name: .notifyName, 89 object: nil, 90 userInfo: ["mykind":ret] 91 ) 92 } 93 94} 95

試したこと

上記コードを実行すると、iPhoneに着信があったことを取得してendCallメソッドを実行し
エラーも発生していないことまでは確認できました。
ただ、電話を切ることはできずそのまま着信コールが続きます。
アプリに関係なくiPhoneにかかってきた電話をアプリから電話を切ることは実現可能でしょうか。

補足情報(FW/ツールのバージョンなど)

Xcode11で開発しています。
iPhoneOS 13.3.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Callkitでの発信ならば切断できるらしいです。

SO

投稿2020/02/27 00:33

編集2020/02/27 00:35
kyoya0819

総合スコア10429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chicchi

2020/02/27 00:50

ありがとうございます。 そうなるとやはり通常の発信からの着信に対して、Calkitでの切断は実現不可能になるのでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問