À§Ä¡Á¤º¸(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À» üũÇÏ¸é ¼³Á¤ÀÌ ¿Ï·áµÈ´Ù.

 

´Ù¿î·Îµå