こんにちは!
iosにてホームボタンを押してアプリを閉じるときにある処理をさせたいです。
たぶんアプリがバックグラウンドに移行したらある処理をさせるようにコーディングしないといけないと思っているのですが、
電話がかかってきて電話に出たとき、バックグラウンドに移行してしまいますが、そのときは
ある処理というのをさせたくありません。
何か良い方法はありませんでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
たぶんアプリがバックグラウンドに移行したらある処理をさせるようにコーディングしないといけないと思っているのですが、
という事ですがアプリがバックグラウンドに入る際に処理をさせることは必須ではありません。
自分でバックグラウンドに入る際に処理を行いたい場合は、AppDelegateのapplicationWillResignActive
やapplicationDidEnterBackground
メソッドが呼ばれるのでそちらで処理を記述する方法があります。
電話がかかってきて電話に出たとき、バックグラウンドに移行してしまいますが、そのときは
ある処理というのをさせたくありません。
こちらですが、電話によりバックグラウンドへ遷移したことを判定するのは無理だと思います。
上記は..iilllii..さんの回答によりできました。m(_ _)m
..iilllii..さんのアドバイスより出来ましたのでそのコード
電話がかかってきた場合はなぜだかapplicationDidEnterBackground
が呼ばれませんでした、なのでapplicationWillResignActive
でのフラグ制御にしました。
AppDelegateでの判定パターン
swift
1import UIKit 2import CoreTelephony 3 4@UIApplicationMain 5class AppDelegate: UIResponder, UIApplicationDelegate { 6 7 var window: UIWindow? 8 9 let callCenter = CTCallCenter() 10 var isCallBackgroud: Bool = false 11 12 13 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 14 15 callCenter.callEventHandler = { (call) -> () in 16 17 if call.callState == CTCallStateIncoming { 18 // 電話がかかってきた場合に呼ばれるハンドラ(フラグを変更しています。) 19 self.isCallBackgroud = true 20 } 21 print(call.callState) 22 } 23 24 return true 25 } 26 27 func applicationWillResignActive(application: UIApplication) { 28 print("willResignActive") 29 30 if isCallBackgroud { 31 // 電話がかかってきてバックグラウンドへ遷移した場合処理をしない 32 isCallBackgroud = false 33 return 34 } 35 36 // バックグラウンド処理を記述 37 } 38 39 func applicationDidEnterBackground(application: UIApplication) { 40 print("didEnterBackground") 41 } 42}
Flow ①
callEventHandler (CTCallStateIncoming)
↓
applicationWillResignActive
↓ 電話を切った
callEventHandler (CTCallStateDisconnected)
Flow ②
callEventHandler (CTCallStateIncoming)
↓
applicationWillResignActive
↓ 電話に出た
callEventHandler (CTCallStateConnected)
↓ 電話を切った
callEventHandler (CTCallStateDisconnected)
投稿2016/03/26 12:51
編集2016/03/27 00:09総合スコア8490
0
ベストアンサー
Core Telephony Frameworkというのでなんとかできないか?
CTCallCenterのcallEventHandlerというので電話関連のイベント通知されるみたいだから、そこで「電話に出ているとき」ならCTCallStateConnectedが通知されかつその後CTCallStateDisconnectedされてない状態ってわけだからハンドラ内で状態フラグでも管理しとく。そしてapplicationDidEnterBackgroundとかいうのの中で判断できないか?
でもCTCallStateConnected時もCTCallStateDisconnected時もアプリがバックグラウンドにいるわけだから通知されないのかな?状態管理むずそうだ。CTCallStateIncomingなら通知されるのかな?「ユーザーが電話に出ようとして操作したことにより自分がバックグラウンドにいった」と確実には判断できないとは思うが電話かかってきて数秒以内ならそうだろう、と推測ぐらいはできるんじゃ?
どういうイベントフローになるかもわからんし、ほんとに通知されるのかも知らんが興味あるからやってみてくれ!俺も試したいがiOSアプリ開発は素人だし今Macもってないから無理だ!
投稿2016/03/26 16:12
総合スコア48
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/27 01:48
2016/03/27 02:52
2016/03/27 03:11