2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 namespace Tizen.Location.Geofence
22 /// Geo-fence defines a virtual perimeter for a real-world geographic area.
23 /// If you create a geofence, you can trigger some activities when a device enters(or exits) the geofences defined by you.
24 /// You can create a geofence with the information of Geopoint, Wi-Fi, or BT.
26 /// <item>Geopoint: Geofence is specified by coordinates (Latitude and Longitude) and Radius</item>
27 /// <item>WIFI: Geofence is specified by BSSID of Wi-Fi access point</item>
28 /// <item>BT: Geofence is specified by Bluetooth address</item>
30 /// Basic service set identification(BSSID) The BSSID is the MAC address of the wireless access point(WAP) generated by combining the 24 bit Organization Unique Identifier(the manufacturer's identity)
31 /// and the manufacturer's assigned 24-bit identifier for the radio chipset in the WAP.
33 public class Fence : IDisposable
35 internal IntPtr Handle
42 internal Fence(IntPtr handle)
52 /// Gets the type of geofence
59 GeofenceError ret = (GeofenceError)Interop.Geofence.FenceType(Handle, out val);
60 if (ret != GeofenceError.None)
62 Tizen.Log.Error(GeofenceErrorFactory.LogTag, "Failed to get GeofenceType");
70 /// Gets the id of place.
77 GeofenceError ret = (GeofenceError)Interop.Geofence.FencePlaceID(Handle, out result);
78 if (ret != GeofenceError.None)
80 Tizen.Log.Error(GeofenceErrorFactory.LogTag, "Failed to get PlaceId");
88 ///Gets the longitude of geofence.
90 public double Longitude
95 GeofenceError ret = (GeofenceError)Interop.Geofence.FenceLongitude(Handle, out result);
96 if (ret != GeofenceError.None)
98 Tizen.Log.Error(GeofenceErrorFactory.LogTag, "Failed to get Longitude");
107 ///Gets the latitude of geofence.
109 public double Latitude
114 GeofenceError ret = (GeofenceError)Interop.Geofence.FenceLatitude(Handle, out result);
115 if (ret != GeofenceError.None)
117 Tizen.Log.Error(GeofenceErrorFactory.LogTag, "Failed to get Latitude");
125 /// Gets the radius of geofence.
132 GeofenceError ret = (GeofenceError)Interop.Geofence.FenceRadius(Handle, out result);
133 if (ret != GeofenceError.None)
135 Tizen.Log.Error(GeofenceErrorFactory.LogTag, "Failed to get Radius");
143 /// Gets the state of geofence.
145 public GeofenceState FenceState
150 GeofenceError ret = (GeofenceError)Interop.Geofence.FenceState(Handle, out state);
151 if (ret != GeofenceError.None)
153 Tizen.Log.Error(GeofenceErrorFactory.LogTag, "Failed to get GeofenceState");
161 /// Gets the amount of seconds geofence is in the current state.
168 GeofenceError ret = (GeofenceError)Interop.Geofence.FenceDuration(Handle, out result);
169 if (ret != GeofenceError.None)
171 Tizen.Log.Error(GeofenceErrorFactory.LogTag, "Failed to get Duration");
179 /// Gets the address of geofence.
181 public string Address
186 GeofenceError ret = (GeofenceError)Interop.Geofence.FenceAddress(Handle, out result);
187 if (ret != GeofenceError.None)
189 Tizen.Log.Error(GeofenceErrorFactory.LogTag, "Failed to get Adress");
197 /// Gets the bssid of geofence.
204 GeofenceError ret = (GeofenceError)Interop.Geofence.FenceBSSID(Handle, out result);
205 if (ret != GeofenceError.None)
207 Tizen.Log.Error(GeofenceErrorFactory.LogTag, "Failed to get Bssid");
215 ///Gets the ssid of geofence.
222 GeofenceError ret = (GeofenceError)Interop.Geofence.FenceSSID(Handle, out result);
223 if (ret != GeofenceError.None)
225 Tizen.Log.Error(GeofenceErrorFactory.LogTag, "Failed to get Ssid");
233 /// Creates a geopoint type of new geofence.
235 /// <param name="placeId">The current place id</param>
236 /// <param name="latitude">Specifies the value of latitude of geofence [-90.0 ~ 90.0] (degrees) </param>
237 /// <param name="longitude">Specifies the value of longitude of geofence [-180.0 ~ 180.0] (degrees) </param>
238 /// <param name="radius">Specifies the value of radius of geofence [100 ~ 500](meter) </param>
239 /// <param name="adsress">Specifies the value of address</param>
240 /// <returns>Newly created geofence instance </returns>
241 /// <exception cref="ArgumentException">Incase of Invalid parameter</exception>
242 /// <exception cref="InvalidOperationException">Incase of any System error</exception>
243 /// <exception cref="UnauthorizedAccessException">Incase of Pvivileges are not defined</exception>
244 /// <exception cref="NotSupportedException">Incase of Geofence is not supported</exception>
245 public static Fence CreateGPSFence(int placeId, int latitude, int longitude, int radius, string address)
247 IntPtr handle = IntPtr.Zero;
248 GeofenceError ret = (GeofenceError)Interop.Geofence.CreateGPSFence(placeId,latitude, longitude, radius,address,out handle);
249 if (ret != GeofenceError.None)
251 throw GeofenceErrorFactory.CreateException(ret, "Failed to create Geofence from GPS Data for " + placeId);
254 return new Fence(handle);
258 /// Creates a Wi-Fi type of new geofence.
260 /// <param name="placeId">The current place id </param>
261 /// <param name="bssid">Specifies the value of BSSID of Wi-Fi MAC address</param>
262 /// <param name="ssid"> Specifies the value of SSID of Wi-Fi Device </param>
263 /// <returns>Newly created geofence instance </returns>
264 /// <exception cref="ArgumentException">Incase of Invalid parameter</exception>
265 /// <exception cref="InvalidOperationException">Incase of any System error</exception>
266 /// <exception cref="UnauthorizedAccessException">Incase of Pvivileges are not defined</exception>
267 /// <exception cref="NotSupportedException">Incase of Geofence is not supported</exception>
268 public static Fence CreateWifiFence(int placeId, string bssid, string ssid)
270 IntPtr handle = IntPtr.Zero;
271 GeofenceError ret = (GeofenceError)Interop.Geofence.CreateWiFiFence(placeId, bssid, ssid, out handle);
272 if (ret != GeofenceError.None)
274 throw GeofenceErrorFactory.CreateException(ret, "Failed to create Geofence from Wifi Data for " + placeId);
277 return new Fence(handle);
281 /// Creates a bluetooth type of new geofence.
283 /// <param name="placeId">The current place id </param>
284 /// <param name="bssid">Specifies the value of BSSID of BT MAC address</param>
285 /// <param name="ssid"> Specifies the value of SSID of BT Device </param>
286 /// <returns>Newly created geofence instance </returns>
287 /// <exception cref="ArgumentException">Incase of Invalid parameter</exception>
288 /// <exception cref="InvalidOperationException">Incase of any System error</exception>
289 /// <exception cref="UnauthorizedAccessException">Incase of Pvivileges are not defined</exception>
290 /// <exception cref="NotSupportedException">Incase of Geofence is not supported</exception>
291 public static Fence CreateBTFence(int placeId, string bssid, string ssid)
293 IntPtr handle = IntPtr.Zero;
294 GeofenceError ret = (GeofenceError)Interop.Geofence.CreateBTFence(placeId, bssid, ssid, out handle);
295 if (ret != GeofenceError.None)
297 throw GeofenceErrorFactory.CreateException(ret, "Failed to create Geofence from Bluetooth Data for " + placeId);
300 return new Fence(handle);
304 /// Overloaded Dispose API for destroying the fence Handle.
306 public void Dispose()
309 GC.SuppressFinalize(this);
312 private void Dispose(bool disposing)
316 if (Handle != IntPtr.Zero)
318 Interop.Geofence.Destroy(Handle);
319 Handle = IntPtr.Zero;