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

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

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

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

Xcode

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

Swift

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

Q&A

解決済

4回答

6259閲覧

アプリがバックグラウンドにある状態で位置情報を取得したい!!

iwanharts

総合スコア32

iOS

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

Xcode

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

Swift

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

0グッド

0クリップ

投稿2016/09/02 15:34

###前提・実現したいこと
iOSアプリを開発中なのですが、アプリがバックグラウンドにある状態で位置情報を取得し通信を行いたいと考えています。
そして、アプリがバックグラウンドにある状態で位置情報を取得したいのですが、バックグラウンドでの実行のさせ方が全くわかりません。

###試したこと
ここを参考に考えましたが、この方法では180秒が限界という記事を見ました。

また、
サイト1
サイト2
サイト3
を見て全く同じように作成したつもりなのですが、バックグラウンドでバックグラウンドで位置情報の更新は行われていませんでした。

swift

1 2func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 3 let lastLocation = locations.last 4 if let last = lastLocation { 5 let eventDate = last.timestamp 6 if abs(eventDate.timeIntervalSinceNow) < 15.0 { 7 if let location = manager.location { 8 let lat = "".stringByAppendingFormat("%.4f", location.coordinate.latitude) 9 let lng = "".stringByAppendingFormat("%.4f", location.coordinate.longitude) 10 11 print("location updated -> " + lat + " : " + lng) 12 } 13 } 14 } 15 } 16

これが更新時のアクションです。
どうすれば動くようになるのか、教えて下さい。

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

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

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

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

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

guest

回答4

0

NSTimerを用いることで定期的にアクションを起こせた。

投稿2016/09/04 02:49

iwanharts

総合スコア32

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

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

0

ベストアンサー

質問に記載されているサイト3の説明にあるようにBackground ModesのLocation updatesをONにした上で
iOS9から追加されたallowsBackgroundLocationUpdatesをtrueに設定してもダメなんですか?

それと、Background Locationの動作は、位置が変わらない限りアプリはスリープしていて、
位置が変わったことを検出した時にアプリが起こされてdidUpdateLocationsが呼び出されると
思うんですが、 実際に移動して試しているんですか?

それと、そのコードでは現在時刻から15秒前以内に位置情報を取得した時だけprintするようになっているようですが、現在時刻より15秒以上前に取得した位置情報は自分で捨てているだけで、実際には通知されているという可能性はないですか?

https://developer.apple.com/jp/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009497-CH2-SW10
の説明にある通り、バックグラウンドでは電力の節約のために位置情報の変化を検出した時にすぐに呼び出すのではなく、一定数の変化情報がたまってからアプリを起こして、まとめて通知するという機能もありますよ。

投稿2016/09/02 16:18

編集2016/09/02 16:21
TakeOne

総合スコア6299

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

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

0

バックグラウンドでもアプリが継続して動くにはプロジェクト設定のCapabilitiesにあるBackground Modesに該当するものを設定しておく必要があります。
こちらのブログに書かれているのでそのままでいけると思います。

投稿2016/09/02 15:46

toki_td

総合スコア2850

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

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

iwanharts

2016/09/02 15:54

ウーーン 設定できていました´д` ;
guest

0

回答にはならないと思いますが、iPhoneは本体の設定で、
アプリのバックグラウンド動作の許可のオン・オフが選択できるので、
アプリ側で強制的にバックグラウンドで動作させるのは、困難かもしれません。

バックグラウンド動作を見直すことでiPhoneのバッテリーのもちは改善する

投稿2016/09/02 15:44

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

iwanharts

2016/09/02 15:50

なるほど。。。 何とかバックグラウンドの許可を出す方法はないでしょうか?
退会済みユーザー

退会済みユーザー

2016/09/02 16:00

ご存知かもしれませんが、Terrainの過去の記事でくわしいページがありました。 https://teratail.com/questions/25228
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問