HOME > CLLocationManagerで現在位置を取得
仕事で現在地の経度緯度データを取得する作業があったのでメモ。
NSObject
↑
CLLocationManager
>参考:CoreLocation Framework Reference CLLocationManager Class Reference
参考:001 現在の位置情報の取得
参考:Swiftで現在地を取得してみた
参考:Swiftで現在地の緯度経度と住所を取得
あっさりしたシンプルなサンプルがなかったので省略型です。
(シュミレータだと成功しないので注意です!地味にハマってしまいました。。。)
import UIKit
import CoreLocation
class ViewController: UIViewController , CLLocationManagerDelegate{
var myLocationManager:CLLocationManager!
override func viewDidLoad() {
super.viewDidLoad()
// 現在地を取得します
myLocationManager = CLLocationManager()
myLocationManager.delegate = self
myLocationManager.desiredAccuracy = kCLLocationAccuracyBest
myLocationManager.distanceFilter = 100
myLocationManager.startUpdatingLocation()
}
// 位置情報取得成功時に呼ばれます
func locationManager(manager: CLLocationManager!,didUpdateLocations locations: [AnyObject]!){
println("緯度:\(manager.location.coordinate.latitude)")
println("経度:\(manager.location.coordinate.longitude)")
}
// 位置情報取得失敗時に呼ばれます
func locationManager(manager: CLLocationManager!,didFailWithError error: NSError!){
print("error")
}
}
上記のコードで経度緯度は取得できます。CLLocationManagerはその他プロパティによる設定調整が可能ですのでリファレンスを ご参照ください。
KeyがNSLocationAlwaysUsageDescriptionで値は何でもかまいません。ダイアログ表示される際に 表示される文字列です。
位置情報を取得するにはユーザ必要なのですが、初回アクセス時に表示される「位置情報取得を許可しますか?」の ダイアログを「許可しない」にすると次回から表示されなくなり必要な場合に面倒なのですが、その場合にもダイアログが表示されるようにする為に statusコードをみて判断する方法です
import UIKit
import CoreLocation
class ViewController: UIViewController , CLLocationManagerDelegate{
var myLocationManager:CLLocationManager!
override func viewDidLoad() {
super.viewDidLoad()
myLocationManager = CLLocationManager()
myLocationManager.delegate = self
// 承認されていない場合はここで認証ダイアログを表示します.
let status = CLLocationManager.authorizationStatus()
if(status == CLAuthorizationStatus.NotDetermined) {
println("didChangeAuthorizationStatus:\(status)");
self.myLocationManager.requestAlwaysAuthorization()
}
myLocationManager.desiredAccuracy = kCLLocationAccuracyBest
myLocationManager.distanceFilter = 100
myLocationManager.startUpdatingLocation()
}
// 現状のステータス状態を表示します
func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
println("didChangeAuthorizationStatus");
var statusStr = "";
switch (status) {
case .NotDetermined: statusStr = "NotDetermined"
case .Restricted: statusStr = "Restricted"
case .Denied: statusStr = "Denied"
case .Authorized: statusStr = "Authorized"
case .AuthorizedWhenInUse: statusStr = "AuthorizedWhenInUse"
}
println(" CLAuthorizationStatus: \(statusStr)")
}
// 位置情報取得成功時に呼ばれます
func locationManager(manager: CLLocationManager!,didUpdateLocations locations: [AnyObject]!){
println("緯度:\(manager.location.coordinate.latitude)")
println("経度:\(manager.location.coordinate.longitude)")
}
// 位置情報取得失敗時に呼ばれます
func locationManager(manager: CLLocationManager!,didFailWithError error: NSError!){
print("error")
}
}
サンプルが長いものが多かったので最小限のコードでの共有でした
2021-05-14 14:21:41 | WatchOSのwatchconnectivityのFiletransferの落とし穴。と、避け方。
AppleWatch 実機だと成功するんだけど、シュミレーターだと失敗するという、、、
昔作成してた時は成功してたのになーと思って調べると、どうやら昔は成功してたみたい。watchOS6以降は... |
2021-05-06 14:04:37 | LINEのアニメーションスタンプ制作の落とし穴、、、失敗談
ゴールデンウィークにLINEスタンプを作成してみました。
作り切って申請も通したんですが、意図したアニメーションと違う、、、、
LINEクリエーターの画面だと、アニメーションのプレビュー... |
2021-05-01 18:05:35 | 久しぶりのAdmobをobjective-cに実装。コンパイルエラーだらけ。バーミッション不具合でエミュレータにインスコできない。
忘れないようにメモ
エミュレータにアプリをインストールする際にパーミッション系のエラーがでた時、また、iphone実機にインストールする際にも権限系のエラーが出る場合。
ターゲット→ex... |
Tweet | |||
|