À§Ä¡Á¤º¸(GPS)
¿©±â¼´Â ¸ñÇ¥ÇÏ´Â °³¹ßÇÁ·Î±×·¥(µµÂø¾Ë¸²ÀÌ)¿¡¼ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï GPS À§Ä¡¸¦ ÁöÁ¤ÇÏ¿© ±× À§Ä¡¿ÍÀÇ °Å¸®¸¦ ȸ鿡 Ç¥½ÃÇϰí, ±× °Å¸®°¡ 700m À̳»À̸é PlayAlarmÀ̶ó´Â ÇÔ¼ö¸¦ È£ÃâÇϵµ·Ï ¸¸µé°ÍÀÌ´Ù.
¸ÕÀú GPSSampleÀ̶ó´Â ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé°í Main.axmlÀ» ¿¾î ToolBox¿¡¼ Text(Medium)À» ¼±ÅÃÇÏ¿© »ðÀÔÇÑ ÈÄ id¸¦ textDistance·Î ¼öÁ¤ÇÑ´Ù.
¿©±â¸¦ Ŭ¸¯ÇÏ¿© LocationInfo.cs¸¦ ´Ù¿î¹Þ°í ´ëÈ »óÀÚ¿¡¼ ÀÛ¼ºÇÑ MessageBox.cs¸¦ º¹»çÇÑ ÈÄ ÇÁ·ÎÁ§Æ®¿¡ Ãß°¡ÇÑ´Ù.
MainActivity.cs¸¦ ¿¾î ´ÙÀ½°ú °°ÀÌ ¼Ò½º¸¦ ¼öÁ¤ÇÑ´Ù.
LocationInfoŬ·¹½º¿Í MessageBoxŬ·¡½º¸¦ »ç¿ëÇϱâ À§ÇØ CommonLibÀ» usingÇϰí Activity·ÎºÎÅÍ »ó¼Ó ¹ÞÀº MainActivity¸¦ LocationInfo·ÎºÎÅÍ »ó¼Ó ¹Þµµ·Ï ¼öÁ¤ÇÑ´Ù.
using CommonLib;
namespace GpsSample { [Activity(Label = "GpsSample", MainLauncher = true, Icon = "@drawable/icon")] public class MainActivity : LocationInfo
|
¸ñÀûÁö À§µµ°æµµ¸¦ ½Ãû ±Ùó·Î ¼³Á¤Çϰí TextView º¯¼ö¸¦ ¼±¾ðÇÏ¿© ¾Õ¿¡¼ »ðÀÔÇÑ textDistance¿Í ¿¬°áÇϰí GPS½ÅÈ£¸¦ ÀÐÀ» ¼ö ÀÖµµ·Ï InitLocationInfo()ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
//½Ãû ±Ùó À§µµ °æµµ ¼³Á¤Çß´Ù. Google Map API¸¦ ÀÌ¿ëÇÑ Áöµµ Ç¥½Ã¿¡¼ ¼³¸íÇÑ ¹æ½ÄÀ» ÀÌ¿ëÇÏ¿© ¸ñÀûÁö¸¦ ¼³Á¤ÇÏ¸é µÈ´Ù. double dDestLatitude = 37.5665; double dDestLongitude = 126.9780; TextView textDistance = null;
protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView (Resource.Layout.Main); this.textDistance = FindViewById<TextView>(Resource.Id.textDistance); InitLocationInfo(); } |
InitLocationInfo³»ºÎ¸¦ º¸¸é ½º¸¶Æ®ÆùÀÇ GPS°¡ ²¨Á® ÀÖÀ¸¸é ÄÓ¼ö ÀÖµµ·Ï ȸéÀ¸·Î ¿Å°Ü°¡´Â ·çƾµµ µé¾î ÀÖÀ¸´Ï Âü°íÇϱ⠹ٶõ´Ù.
GPSÀÇ À§Ä¡°¡ ¹Ù²î¸é È£ÃâµÇ´Â virtual ÇÔ¼ö¸¦ LocationInfoŬ·¡½º¿¡ ÀÛ¼ºÇصξúÀ¸¹Ç·Î overried·Î OnLocationChanged()ÇÔ¼ö¸¦ ¸¸µé¾î GPS À§Ä¡°¡ ¹Ù²ð¶§ ¸¶´Ù È£ÃâÀÌ µÇµµ·Ï ÇÑ´Ù.
ÀÌ ÇÔ¼ö¿¡¼ ¸ñÀûÁö ¿ÍÀÇ °Å¸®¸¦ ȸ鿡 Ç¥ÃâÇϰí, ±× °Å¸®°¡ 700m À̳»À̸é PlayAlarmÀ» È£ÃâÇÑ´Ù. PlayAlarmÀº ºóÇÔ¼ö·Î ¸¸µé¾î µÎ¾ú´Ù.
protected override void OnLocationChanged() { if (!IsArrivedDest()) return; PlayAlarm(); }
private void PlayAlarm() { //°æº¸À½À̳ª Áøµ¿À» ¿ï¸®µµ·Ï Ãß°¡ÇÏ¸é µÈ´Ù(ÀÌÈÄ °Á¿¡¼ ¼³¸í¿¹Á¤) } |
IsArrivedDestÇÔ¼ö³»¿¡¼ GetGeoLocation ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© GPS À§Ä¡¸¦ ±¸Çϰí DisplayDistance¸¦ È£ÃâÇÏ¿© ¸ñÀûÁö¿ÍÀÇ °Å¸®¸¦ ȸ鿡 Ç¥ÃâÇÏ¸ç ±× °Å¸®°¡ 700m À̳»À̸é true¸¦ È£ÃâÇØÁØ´Ù.
private bool IsArrivedDest() { double dLatitude = 0; double dLongitude = 0; if (!GetGeoLocation(ref dLatitude, ref dLongitude)) return false; double dDistance = DisplayDistance(dLatitude, dLongitude); if (dDistance > 700) return false; return true; }
double DisplayDistance(double dLatitude, double dLongitude) { double dDistance = GetDistance(dLatitude, dLongitude, this.dDestLatitude, this.dDestLongitude); int nDistance = (int)dDistance; string strDistance = "³²Àº °Å¸® : "; if (nDistance > 1000) { int nBuffer = nDistance / 1000; strDistance += (nBuffer.ToString() + "Km "); nBuffer = nDistance % 1000; strDistance += (nBuffer.ToString() + "m"); } else strDistance += (nDistance.ToString() + "m"); this.textDistance.Text = strDistance; return dDistance; } |
ÀÌÁ¦ ¼Ò½º ¼öÁ¤Àº ³¡³µ´Ù.
½º¸¶Æ®Æù¿¡¼ GPS Àåºñ¿Í ³×Æ®¿öÅ© Àåºñ(³»ºÎÀûÀ¸·Î GPS ½ÅÈ£°¡ ¾àÇÒ °æ¿ì ³×Æ®¿öÅ©¸¦ ÀÌ¿ëÇÏ¿© ´ë·«Àû À§Ä¡¸¦ ±¸Çϵµ·Ï µÇ¾î ÀÖ´Ù)¸¦ AccessÇϱâ À§ÇØ ´ÙÀ½°ú °°ÀÌ ±ÇÇÑÀ» ÁÖ¾î¾ß ÇÑ´Ù.
ÁÂÃø ÇÁ·ÎÁ§Æ® TreeÀÇ ÇÁ·ÎÁ§Æ®¿¡¼ ¸¶¿ì½º ¿ìÃø ¹öưÀ» Ŭ¸¯ÇÏ¿© »ý¼ºµÈ ÆË¾÷¸Þ´º¿¡¼ Properties¸¦ ¼±ÅÃÇÏ¸é ´ÙÀ½°ú °°Àº ȸéÀÌ ³ªÅ¸³´Ù.
ACCESS_COARSE_LOCATION°ú ACCESS_FINE_LOCATIONÀ» üũÇÏ°í ½ºÅ©·ÑÀ» ³»·Á INTERNETÀ» üũÇÏ¸é ¼³Á¤ÀÌ ¿Ï·áµÈ´Ù.
´Ù¿î·Îµå