스위프트로 비콘 관측하기.
10222 단어 beaconCoreLocationSwift
개발 환경
Xcode 10.1
iOS 12.1
Swift4.2.1
비콘 관측 준비.
위치 정보 사용 준비
info.plist를 열고 +를 누르면 추가됩니다.
이제 다음 중 하나를 입력합니다.
어떤 것을 입력하시겠습니까? 개발하고 싶은 프로그램의 내용에 따라 변경하십시오.
자꾸 관측하고 싶은 상황.
응용 프로그램을 사용할 때만 관찰해야 하는 상황
NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription
그러나 iOS 11에서 "자꾸 위치 정보 가져오기"를 설정한 경우 "적용 기간 동안에만 위치 정보 가져오기 허용"옵션을 표시해야 합니다.NSLocationAlwaysUsageDescription
설정의 경우NSLocationWhenInUseUsageDescription
도 필요합니다.value
에 위치 정보가 어떤 목적에 쓰였는지 기술하였다.
ex) Beacon 관측용
코드
import UIKit
import CoreLocation
class ViewController: UIViewController, CLLocationManagerDelegate {
//beaconの値取得関係の変数
var trackLocationManager : CLLocationManager!
var beaconRegion : CLBeaconRegion!
override func viewDidLoad() {
super.viewDidLoad()
// ロケーションマネージャを作成する
trackLocationManager = CLLocationManager();
// デリゲートを自身に設定
trackLocationManager.delegate = self;
// BeaconのUUIDを設定
let uuid:UUID? = UUID(uuidString: "uuid")
//Beacon領域を作成
beaconRegion = CLBeaconRegion(proximityUUID: uuid!, identifier: "net.noumenon-th")
// セキュリティ認証のステータスを取得
let status = CLLocationManager.authorizationStatus()
// まだ認証が得られていない場合は、認証ダイアログを表示
if(status == CLAuthorizationStatus.notDetermined) {
trackLocationManager.requestWhenInUseAuthorization()
}
}
//位置認証のステータスが変更された時に呼ばれる
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
//観測を開始させる
trackLocationManager.startMonitoring(for: self.beaconRegion)
}
//観測の開始に成功すると呼ばれる
func locationManager(_ manager: CLLocationManager, didStartMonitoringFor region: CLRegion) {
//観測開始に成功したら、領域内にいるかどうかの判定をおこなう。→(didDetermineState)へ
trackLocationManager.requestState(for: self.beaconRegion)
}
//領域内にいるかどうかを判定する
func locationManager(_ manager: CLLocationManager, didDetermineState state: CLRegionState, for inRegion: CLRegion) {
switch (state) {
case .inside: // すでに領域内にいる場合は(didEnterRegion)は呼ばれない
trackLocationManager.startRangingBeacons(in: beaconRegion)
// →(didRangeBeacons)で測定をはじめる
break
case .outside:
// 領域外→領域に入った場合はdidEnterRegionが呼ばれる
break
case .unknown:
// 不明→領域に入った場合はdidEnterRegionが呼ばれる
break
}
}
//領域に入った時
func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
// →(didRangeBeacons)で測定をはじめる
self.trackLocationManager.startRangingBeacons(in: self.beaconRegion)
}
//領域から出た時
func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) {
//測定を停止する
self.trackLocationManager.stopRangingBeacons(in: self.beaconRegion)
}
//領域内にいるので測定をする
func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion){
/*
beaconから取得できるデータ
proximityUUID : regionの識別子
major : 識別子1
minor : 識別子2
proximity : 相対距離
accuracy : 精度
rssi : 電波強度
*/
}
}
Reference
이 문제에 관하여(스위프트로 비콘 관측하기.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nwatabou/items/be08d79341bb5721239f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
위치 정보 사용 준비
info.plist를 열고 +를 누르면 추가됩니다.
이제 다음 중 하나를 입력합니다.
어떤 것을 입력하시겠습니까? 개발하고 싶은 프로그램의 내용에 따라 변경하십시오.
자꾸 관측하고 싶은 상황.
응용 프로그램을 사용할 때만 관찰해야 하는 상황
NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription
그러나 iOS 11에서 "자꾸 위치 정보 가져오기"를 설정한 경우 "적용 기간 동안에만 위치 정보 가져오기 허용"옵션을 표시해야 합니다.
NSLocationAlwaysUsageDescription
설정의 경우NSLocationWhenInUseUsageDescription
도 필요합니다.value
에 위치 정보가 어떤 목적에 쓰였는지 기술하였다.ex) Beacon 관측용
코드
import UIKit
import CoreLocation
class ViewController: UIViewController, CLLocationManagerDelegate {
//beaconの値取得関係の変数
var trackLocationManager : CLLocationManager!
var beaconRegion : CLBeaconRegion!
override func viewDidLoad() {
super.viewDidLoad()
// ロケーションマネージャを作成する
trackLocationManager = CLLocationManager();
// デリゲートを自身に設定
trackLocationManager.delegate = self;
// BeaconのUUIDを設定
let uuid:UUID? = UUID(uuidString: "uuid")
//Beacon領域を作成
beaconRegion = CLBeaconRegion(proximityUUID: uuid!, identifier: "net.noumenon-th")
// セキュリティ認証のステータスを取得
let status = CLLocationManager.authorizationStatus()
// まだ認証が得られていない場合は、認証ダイアログを表示
if(status == CLAuthorizationStatus.notDetermined) {
trackLocationManager.requestWhenInUseAuthorization()
}
}
//位置認証のステータスが変更された時に呼ばれる
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
//観測を開始させる
trackLocationManager.startMonitoring(for: self.beaconRegion)
}
//観測の開始に成功すると呼ばれる
func locationManager(_ manager: CLLocationManager, didStartMonitoringFor region: CLRegion) {
//観測開始に成功したら、領域内にいるかどうかの判定をおこなう。→(didDetermineState)へ
trackLocationManager.requestState(for: self.beaconRegion)
}
//領域内にいるかどうかを判定する
func locationManager(_ manager: CLLocationManager, didDetermineState state: CLRegionState, for inRegion: CLRegion) {
switch (state) {
case .inside: // すでに領域内にいる場合は(didEnterRegion)は呼ばれない
trackLocationManager.startRangingBeacons(in: beaconRegion)
// →(didRangeBeacons)で測定をはじめる
break
case .outside:
// 領域外→領域に入った場合はdidEnterRegionが呼ばれる
break
case .unknown:
// 不明→領域に入った場合はdidEnterRegionが呼ばれる
break
}
}
//領域に入った時
func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
// →(didRangeBeacons)で測定をはじめる
self.trackLocationManager.startRangingBeacons(in: self.beaconRegion)
}
//領域から出た時
func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) {
//測定を停止する
self.trackLocationManager.stopRangingBeacons(in: self.beaconRegion)
}
//領域内にいるので測定をする
func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion){
/*
beaconから取得できるデータ
proximityUUID : regionの識別子
major : 識別子1
minor : 識別子2
proximity : 相対距離
accuracy : 精度
rssi : 電波強度
*/
}
}
Reference
이 문제에 관하여(스위프트로 비콘 관측하기.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nwatabou/items/be08d79341bb5721239f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)