Ejemplo n.º 1
0
        /// <summary>
        /// 領域から出た際にステータスを更新します。
        /// </summary>
        /// <param name="manager"></param>
        /// <param name="region"></param>
        public override void RegionLeft(CLLocationManager manager, CLRegion region)
        {
            Console.WriteLine("Exit [{0}] Region", region.Identifier);
            var adapter = new DbAdapter_iOS();

            if (region.Identifier.Equals(RegionList.研究室.Identifier))
            {
                //研究室領域から退出
                UpdateStatus(Status.学内.GetStatusId());
                adapter.AddDeviceLog("在室状況を「学内」に更新", $"領域[{RegionList.研究室.Name}]から退出");
            }
            else
            {
                //学内領域から退出
                var gregion = RegionList.CampusAllRegions
                              .Where(r => r.Identifier.Equals(region.Identifier))
                              .First();
                adapter.UpdateGeofenceStatus(UserDataModel.Instance.DeviceId, gregion.DbIdentifierName, false);

                adapter.AddDeviceLog($"領域[{gregion.Name}]から退出");

                if (manager.Location != null)
                {
                    AddLocationLog(manager.Location, "LastUpdate", false);
                }
                else
                {
                    manager.RequestLocation();
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 領域に侵入した際にステータスを更新します。
        /// </summary>
        /// <param name="manager"></param>
        /// <param name="region"></param>
        public override void RegionEntered(CLLocationManager manager, CLRegion region)
        {
            var adapter = new DbAdapter_iOS();

            if (region.Identifier.Equals(RegionList.研究室.Identifier))
            {
                //研究室領域に侵入
                UpdateStatus(Status.在室.GetStatusId());
                adapter.AddDeviceLog("在室状況を「在室」に更新", $"領域[{RegionList.研究室.Name}]に侵入");
            }
            else
            {
                //学内領域に侵入
                var gregion = RegionList.CampusAllRegions
                              .Where(r => r.Identifier.Equals(region.Identifier))
                              .First();

                adapter.UpdateGeofenceStatus(UserDataModel.Instance.DeviceId, gregion.DbIdentifierName, true);
                adapter.AddDeviceLog("ジオフェンス状態を更新", $"領域[{gregion.Name}]に侵入");

                if (manager.Location != null)
                {
                    AddLocationLog(manager.Location, "LastUpdate", true);
                }
                else
                {
                    manager.RequestLocation();
                }
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 位置情報利用の認証状態が変わった際に、位置情報のモニタリングを開始します。
        /// </summary>
        /// <param name="manager"></param>
        /// <param name="status"></param>
        public override void AuthorizationChanged(CLLocationManager manager, CLAuthorizationStatus status)
        {
            var adapter = new DbAdapter_iOS();

            adapter.AddDeviceLog($"位置情報の認証状態が更新", status.ToString()); // TODO ステータス名表示に

            if (status == CLAuthorizationStatus.AuthorizedAlways || status == CLAuthorizationStatus.AuthorizedWhenInUse)
            {
                //iBeacon領域判定の有効化
                if (CLLocationManager.IsMonitoringAvailable(typeof(CLBeaconRegion)))
                {
                    研究室領域.NotifyEntryStateOnDisplay = false;
                    研究室領域.NotifyOnEntry             = true;
                    研究室領域.NotifyOnExit = true;

                    manager.StartMonitoring(研究室領域);
                }

                //ジオフェンス領域の有効化
                if (CLLocationManager.IsMonitoringAvailable(typeof(CLCircularRegion)))
                {
                    foreach (var gr in 学内領域)
                    {
                        gr.NotifyOnEntry = true;
                        gr.NotifyOnExit  = true;
                        manager.StartMonitoring(gr);
                    }
                }
            }
            else
            {
                //位置情報利用の許可を貰う
                manager.RequestAlwaysAuthorization();
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// ステータス情報を更新します。
        /// </summary>
        /// <param name="stateId">更新するステータスID</param>
        private void UpdateStatus(int stateId)
        {
            var memId = UserDataModel.Instance.MemberId;

            if (memId == UserDataModel.DefaultMemberId)
            {
                return;
            }

            //ステータスの更新処理
            var adapter = new DbAdapter_iOS();

            adapter.UpdateStatus(memId, stateId, true);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 位置情報のログを送信します。
        /// </summary>
        /// <param name="location">CLLocation</param>
        /// <param name="type">位置情報の取得種別</param>
        /// <param name="isEnter">侵入か?</param>
        private void AddLocationLog(CLLocation location, string type, bool?isEnter = null)
        {
            var adapter = new DbAdapter_iOS();

            var formatter = new NSDateFormatter();

            formatter.DateFormat = "yyyy/MM/dd HH:mm:ss";
            formatter.TimeZone   = NSTimeZone.SystemTimeZone;
            var dateString   = formatter.StringFor(location.Timestamp);
            var detailString = $"{dateString},iOS,{location.Coordinate.Latitude},{location.Coordinate.Longitude},{location.VerticalAccuracy}";

            if (isEnter.HasValue)
            {
                detailString += $",{(isEnter.Value ? "侵入" : "退出")}";
            }

            adapter.AddDeviceLog($"位置情報取得:{dateString},精度:{location.VerticalAccuracy},種別:{type}", detailString);
        }
Ejemplo n.º 6
0
        private void SendRegistrationToServer(string token)
        {
            IDbAdapter dbAdapter = new DbAdapter_iOS();

            dbAdapter.UpdateDeviceInfo(fcmToken: token);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 位置情報取得失敗時にログを送信します。
        /// </summary>
        /// <param name="manager"></param>
        /// <param name="error"></param>
        public override void Failed(CLLocationManager manager, NSError error)
        {
            var adapter = new DbAdapter_iOS();

            adapter.AddDeviceLog($"位置情報の取得に失敗", error.ToString());
        }