回答編集履歴

8

修正

2016/03/27 00:09

投稿

_Kentarou
_Kentarou

スコア8490

test CHANGED
@@ -78,9 +78,9 @@
78
78
 
79
79
  self.isCallBackgroud = true
80
80
 
81
- print("Call")
81
+ }
82
82
 
83
- }
83
+ print(call.callState)
84
84
 
85
85
  }
86
86
 
@@ -161,5 +161,3 @@
161
161
  callEventHandler (CTCallStateDisconnected)
162
162
 
163
163
 
164
-
165
-

7

修正

2016/03/27 00:09

投稿

_Kentarou
_Kentarou

スコア8490

test CHANGED
@@ -125,3 +125,41 @@
125
125
  }
126
126
 
127
127
  ```
128
+
129
+
130
+
131
+ Flow ①
132
+
133
+ callEventHandler (CTCallStateIncoming)
134
+
135
+
136
+
137
+ applicationWillResignActive
138
+
139
+ ↓ 電話を切った
140
+
141
+ callEventHandler (CTCallStateDisconnected)
142
+
143
+
144
+
145
+
146
+
147
+ Flow ②
148
+
149
+ callEventHandler (CTCallStateIncoming)
150
+
151
+
152
+
153
+ applicationWillResignActive
154
+
155
+ ↓ 電話に出た
156
+
157
+ callEventHandler (CTCallStateConnected)
158
+
159
+ ↓ 電話を切った
160
+
161
+ callEventHandler (CTCallStateDisconnected)
162
+
163
+
164
+
165
+

6

修正

2016/03/27 00:01

投稿

_Kentarou
_Kentarou

スコア8490

test CHANGED
@@ -72,11 +72,15 @@
72
72
 
73
73
 
74
74
 
75
- // 電話がかかってきた場合に呼ばれるハンドラ(フラグを変更しています。)
75
+ if call.callState == CTCallStateIncoming {
76
76
 
77
- self.isCallBackgroud = true
77
+ // 電話がかかってきた場合に呼ばれるハンドラ(フラグを変更しています。)
78
78
 
79
+ self.isCallBackgroud = true
80
+
79
- print("Call")
81
+ print("Call")
82
+
83
+ }
80
84
 
81
85
  }
82
86
 

5

修正

2016/03/26 23:48

投稿

_Kentarou
_Kentarou

スコア8490

test CHANGED
@@ -22,12 +22,6 @@
22
22
 
23
23
 
24
24
 
25
- バックグラウンドへ入る際に行う処理は絶対にそのタイミングで行いたい!という処理を記述しているので、電話の場合だけ行わない様にしたいと言われている処理がどのようなものなのか知りたいです。
26
-
27
-
28
-
29
- 画面単位でこの画面からバックグラウンドへ遷移する場合は処理を行いたくない等なら実現できるし、わかりますが、、、
30
-
31
25
 
32
26
 
33
27
  ---
@@ -36,7 +30,7 @@
36
30
 
37
31
 
38
32
 
39
- 電話がかかってきた場合はなぜだか`UIApplicationDidEnterBackgroundNotification `が呼ばれませんでした、なので`UIApplicationWillResignActiveNotification `でのフラグ制御にしました。
33
+ 電話がかかってきた場合はなぜだか`applicationDidEnterBackground `が呼ばれませんでした、なので`applicationWillResignActive `でのフラグ制御にしました。
40
34
 
41
35
 
42
36
 

4

修正

2016/03/26 23:37

投稿

_Kentarou
_Kentarou

スコア8490

test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
  ---
34
34
 
35
- ..iilllii..さんの回答より出来ましたのでそのコード
35
+ ..iilllii..さんのアドバイスより出来ましたのでそのコード
36
36
 
37
37
 
38
38
 

3

修正

2016/03/26 23:35

投稿

_Kentarou
_Kentarou

スコア8490

test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
 
42
42
 
43
- こちらはViewControllerでの判定パターン
43
+ AppDelegateでの判定パターン
44
44
 
45
45
 
46
46
 
@@ -52,7 +52,13 @@
52
52
 
53
53
 
54
54
 
55
+ @UIApplicationMain
56
+
55
- class ViewController: UIViewController {
57
+ class AppDelegate: UIResponder, UIApplicationDelegate {
58
+
59
+
60
+
61
+ var window: UIWindow?
56
62
 
57
63
 
58
64
 
@@ -60,25 +66,11 @@
60
66
 
61
67
  var isCallBackgroud: Bool = false
62
68
 
63
-
64
69
 
65
70
 
66
71
 
67
- override func viewDidLoad() {
68
72
 
69
- super.viewDidLoad()
70
-
71
-
72
-
73
- // バックグラウンドへの遷移時に呼ばれる通知を登録
74
-
75
- NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.didEnterBackground(_:)), name: UIApplicationDidEnterBackgroundNotification, object: nil)
76
-
77
-
78
-
79
- NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.willResignActive(_:)), name: UIApplicationWillResignActiveNotification, object: nil)
73
+ func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
80
-
81
-
82
74
 
83
75
 
84
76
 
@@ -94,29 +86,23 @@
94
86
 
95
87
  }
96
88
 
97
- }
89
+
98
90
 
99
-
100
-
101
- func didEnterBackground(notify: NSNotification) {
102
-
103
- print("didEnterBackground")
91
+ return true
104
92
 
105
93
  }
106
94
 
107
-
108
95
 
96
+
109
- func willResignActive(notify: NSNotification) {
97
+ func applicationWillResignActive(application: UIApplication) {
110
98
 
111
99
  print("willResignActive")
112
-
113
-
114
100
 
115
101
 
116
102
 
117
103
  if isCallBackgroud {
118
104
 
119
- // 電話がかかってきてバックグラウンドへ遷移した場合
105
+ // 電話がかかってきてバックグラウンドへ遷移した場合処理をしない
120
106
 
121
107
  isCallBackgroud = false
122
108
 
@@ -130,6 +116,14 @@
130
116
 
131
117
  }
132
118
 
119
+
120
+
121
+ func applicationDidEnterBackground(application: UIApplication) {
122
+
123
+ print("didEnterBackground")
124
+
125
+ }
126
+
133
127
  }
134
128
 
135
129
  ```

2

修正

2016/03/26 23:33

投稿

_Kentarou
_Kentarou

スコア8490

test CHANGED
@@ -37,6 +37,10 @@
37
37
 
38
38
 
39
39
  電話がかかってきた場合はなぜだか`UIApplicationDidEnterBackgroundNotification `が呼ばれませんでした、なので`UIApplicationWillResignActiveNotification `でのフラグ制御にしました。
40
+
41
+
42
+
43
+ こちらはViewControllerでの判定のパターン
40
44
 
41
45
 
42
46
 

1

修正

2016/03/26 23:25

投稿

_Kentarou
_Kentarou

スコア8490

test CHANGED
@@ -18,6 +18,8 @@
18
18
 
19
19
  こちらですが、電話によりバックグラウンドへ遷移したことを判定するのは無理だと思います。
20
20
 
21
+ 上記は..iilllii..さんの回答によりできました。m(_ _)m
22
+
21
23
 
22
24
 
23
25
  バックグラウンドへ入る際に行う処理は絶対にそのタイミングで行いたい!という処理を記述しているので、電話の場合だけ行わない様にしたいと言われている処理がどのようなものなのか知りたいです。
@@ -25,3 +27,105 @@
25
27
 
26
28
 
27
29
  画面単位でこの画面からバックグラウンドへ遷移する場合は処理を行いたくない等なら実現できるし、わかりますが、、、
30
+
31
+
32
+
33
+ ---
34
+
35
+ ..iilllii..さんの回答より出来ましたのでそのコード
36
+
37
+
38
+
39
+ 電話がかかってきた場合はなぜだか`UIApplicationDidEnterBackgroundNotification `が呼ばれませんでした、なので`UIApplicationWillResignActiveNotification `でのフラグ制御にしました。
40
+
41
+
42
+
43
+ ```swift
44
+
45
+ import UIKit
46
+
47
+ import CoreTelephony
48
+
49
+
50
+
51
+ class ViewController: UIViewController {
52
+
53
+
54
+
55
+ let callCenter = CTCallCenter()
56
+
57
+ var isCallBackgroud: Bool = false
58
+
59
+
60
+
61
+
62
+
63
+ override func viewDidLoad() {
64
+
65
+ super.viewDidLoad()
66
+
67
+
68
+
69
+ // バックグラウンドへの遷移時に呼ばれる通知を登録
70
+
71
+ NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.didEnterBackground(_:)), name: UIApplicationDidEnterBackgroundNotification, object: nil)
72
+
73
+
74
+
75
+ NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.willResignActive(_:)), name: UIApplicationWillResignActiveNotification, object: nil)
76
+
77
+
78
+
79
+
80
+
81
+ callCenter.callEventHandler = { (call) -> () in
82
+
83
+
84
+
85
+ // 電話がかかってきた場合に呼ばれるハンドラ(フラグを変更しています。)
86
+
87
+ self.isCallBackgroud = true
88
+
89
+ print("Call")
90
+
91
+ }
92
+
93
+ }
94
+
95
+
96
+
97
+ func didEnterBackground(notify: NSNotification) {
98
+
99
+ print("didEnterBackground")
100
+
101
+ }
102
+
103
+
104
+
105
+ func willResignActive(notify: NSNotification) {
106
+
107
+ print("willResignActive")
108
+
109
+
110
+
111
+
112
+
113
+ if isCallBackgroud {
114
+
115
+ // 電話がかかってきてバックグラウンドへ遷移した場合
116
+
117
+ isCallBackgroud = false
118
+
119
+ return
120
+
121
+ }
122
+
123
+
124
+
125
+ // バックグラウンド処理を記述
126
+
127
+ }
128
+
129
+ }
130
+
131
+ ```