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 private bool _disposed = false;
37 internal IntPtr Handle
43 internal Fence(IntPtr handle)
54 /// Gets the type of geofence.
61 GeofenceError ret = (GeofenceError)Interop.Geofence.FenceType(Handle, out val);
62 if (ret != GeofenceError.None)
64 Tizen.Log.Error(GeofenceErrorFactory.LogTag, "Failed to get GeofenceType");
72 /// Gets the id of place.
79 GeofenceError ret = (GeofenceError)Interop.Geofence.FencePlaceID(Handle, out result);
80 if (ret != GeofenceError.None)
82 Tizen.Log.Error(GeofenceErrorFactory.LogTag, "Failed to get PlaceId");
90 /// Gets the longitude of geofence.
92 public double Longitude
97 GeofenceError ret = (GeofenceError)Interop.Geofence.FenceLongitude(Handle, out result);
98 if (ret != GeofenceError.None)
100 Tizen.Log.Error(GeofenceErrorFactory.LogTag, "Failed to get Longitude");
109 /// Gets the latitude of geofence.
111 public double Latitude
116 GeofenceError ret = (GeofenceError)Interop.Geofence.FenceLatitude(Handle, out result);
117 if (ret != GeofenceError.None)
119 Tizen.Log.Error(GeofenceErrorFactory.LogTag, "Failed to get Latitude");
127 /// Gets the radius of geofence.
134 GeofenceError ret = (GeofenceError)Interop.Geofence.FenceRadius(Handle, out result);
135 if (ret != GeofenceError.None)
137 Tizen.Log.Error(GeofenceErrorFactory.LogTag, "Failed to get Radius");
145 /// Gets the address of geofence.
147 public string Address
152 GeofenceError ret = (GeofenceError)Interop.Geofence.FenceAddress(Handle, out result);
153 if (ret != GeofenceError.None)
155 Tizen.Log.Error(GeofenceErrorFactory.LogTag, "Failed to get Adress");
163 /// Gets the bssid of geofence.
170 GeofenceError ret = (GeofenceError)Interop.Geofence.FenceBSSID(Handle, out result);
171 if (ret != GeofenceError.None)
173 Tizen.Log.Error(GeofenceErrorFactory.LogTag, "Failed to get Bssid");
181 /// Gets the ssid of geofence.
188 GeofenceError ret = (GeofenceError)Interop.Geofence.FenceSSID(Handle, out result);
189 if (ret != GeofenceError.None)
191 Tizen.Log.Error(GeofenceErrorFactory.LogTag, "Failed to get Ssid");
199 /// Creates a geopoint type of new geofence.
201 /// <param name="placeId">The current place id.</param>
202 /// <param name="latitude">Specifies the value of latitude of geofence [-90.0 ~ 90.0] (degrees).</param>
203 /// <param name="longitude">Specifies the value of longitude of geofence [-180.0 ~ 180.0] (degrees).</param>
204 /// <param name="radius">Specifies the value of radius of geofence [100 ~ 500](meter).</param>
205 /// <param name="adsress">Specifies the value of address.</param>
206 /// <returns>Newly created geofence instance.</returns>
207 /// <exception cref="ArgumentException">Incase of Invalid parameter.</exception>
208 /// <exception cref="InvalidOperationException">Incase of any System error.</exception>
209 /// <exception cref="NotSupportedException">Incase of Geofence is not supported.</exception>
210 public static Fence CreateGPSFence(int placeId, int latitude, int longitude, int radius, string address)
212 IntPtr handle = IntPtr.Zero;
213 GeofenceError ret = (GeofenceError)Interop.Geofence.CreateGPSFence(placeId, latitude, longitude, radius,address, out handle);
214 if (ret != GeofenceError.None)
216 throw GeofenceErrorFactory.CreateException(ret, "Failed to create Geofence from GPS Data for " + placeId);
219 return new Fence(handle);
223 /// Creates a Wi-Fi type of new geofence.
225 /// <param name="placeId">The current place id.</param>
226 /// <param name="bssid">Specifies the value of BSSID of Wi-Fi MAC address.</param>
227 /// <param name="ssid"> Specifies the value of SSID of Wi-Fi Device.</param>
228 /// <returns>Newly created geofence instance.</returns>
229 /// <exception cref="ArgumentException">Incase of Invalid parameter.</exception>
230 /// <exception cref="InvalidOperationException">Incase of any System error.</exception>
231 /// <exception cref="NotSupportedException">Incase of Geofence is not supported.</exception>
232 public static Fence CreateWifiFence(int placeId, string bssid, string ssid)
234 IntPtr handle = IntPtr.Zero;
235 GeofenceError ret = (GeofenceError)Interop.Geofence.CreateWiFiFence(placeId, bssid, ssid, out handle);
236 if (ret != GeofenceError.None)
238 throw GeofenceErrorFactory.CreateException(ret, "Failed to create Geofence from Wifi Data for " + placeId);
241 return new Fence(handle);
245 /// Creates a bluetooth type of new geofence.
247 /// <param name="placeId">The current place id.</param>
248 /// <param name="bssid">Specifies the value of BSSID of BT MAC address.</param>
249 /// <param name="ssid"> Specifies the value of SSID of BT Device.</param>
250 /// <returns>Newly created geofence instance.</returns>
251 /// <exception cref="ArgumentException">Incase of Invalid parameter.</exception>
252 /// <exception cref="InvalidOperationException">Incase of any System error.</exception>
253 /// <exception cref="NotSupportedException">Incase of Geofence is not supported.</exception>
254 public static Fence CreateBTFence(int placeId, string bssid, string ssid)
256 IntPtr handle = IntPtr.Zero;
257 GeofenceError ret = (GeofenceError)Interop.Geofence.CreateBTFence(placeId, bssid, ssid, out handle);
258 if (ret != GeofenceError.None)
260 throw GeofenceErrorFactory.CreateException(ret, "Failed to create Geofence from Bluetooth Data for " + placeId);
263 return new Fence(handle);
267 /// Overloaded Dispose API for destroying the fence Handle.
269 public void Dispose()
272 GC.SuppressFinalize(this);
275 private void Dispose(bool disposing)
280 if (Handle != IntPtr.Zero)
282 Interop.Geofence.Destroy(Handle);
283 Handle = IntPtr.Zero;