/// <summary>
        /// An asynchronous wrapper around Skobbler's NearbySearch()
        /// </summary>
        /// <param name="nearbySearchObj">The nearby search object</param>
        /// <exception cref="SKSearchStatusException">Thrown if the searchStatus returned by NearbySearch() is not equal to SkSearchNoError</exception>
        /// <returns>An IList of SKSearchResult</returns>
        public async Task <IList <SKSearchResult> > NearbySearchAsync(SKNearbySearchSettings nearbySearchObj)
        {
            var taskCompletionSource = new TaskCompletionSource <IList <SKSearchResult> >();
            var searchListener       = new SKSearchListener(taskCompletionSource);

            SetSearchListener(searchListener);

            SKSearchStatus searchStatus = NearbySearch(nearbySearchObj);

            if (searchStatus != SKSearchStatus.SkSearchNoError)
            {
                taskCompletionSource.TrySetException(new SKSearchStatusException(searchStatus, "The search status returned by NearbySearch is not SKSearchNoError"));
            }

            return(await taskCompletionSource.Task);
        }
        private void StartSearch()
        {
            SKSearchManager searchManager = new SKSearchManager(this);

            SKNearbySearchSettings searchObject = new SKNearbySearchSettings
            {
                Location            = new SKCoordinate(13.387165, 52.516929),
                Radius              = 1500,
                SearchResultsNumber = 300,
                SearchTerm          = String.Empty,
            };

            searchObject.SetSearchCategories(MainCategories);

            SKSearchStatus status = searchManager.NearbySearch(searchObject);

            if (status != SKSearchStatus.SkSearchNoError)
            {
                Toast.MakeText(this, "An error occurred", ToastLength.Short).Show();
            }
        }
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.activity_list);

            FindViewById <TextView>(Resource.Id.label_operation_in_progress).Text = Resources.GetString(Resource.String.searching);
            _listView = FindViewById <ListView>(Resource.Id.list_view);

            _searchManager = new SKSearchManager(this);

            SKNearbySearchSettings nearbySearchObject = new SKNearbySearchSettings
            {
                Location   = new SKCoordinate(Intent.GetDoubleExtra("longitude", 0), Intent.GetDoubleExtra("latitude", 0)),
                Radius     = Intent.GetShortExtra("radius", (short)0),
                SearchTerm = Intent.GetStringExtra("searchTopic"),
            };

            SKSearchStatus status = _searchManager.NearbySearch(nearbySearchObject);

            if (status != SKSearchStatus.SkSearchNoError)
            {
                Toast.MakeText(this, "An error occurred", ToastLength.Short).Show();
            }
        }
 //Serializer invokes this through reflection -> can be private.
 private SKSearchStatusException(SerializationInfo info, StreamingContext context)
     : base(info, context)
 {
     _searchStatus = (SKSearchStatus)info.GetValue("SearchStatus", typeof(SKSearchStatus));
 }
 internal SKSearchStatusException(SKSearchStatus searchStatus, string message, Exception inner)
     : base(message, inner)
 {
     _searchStatus = searchStatus;
 }
 internal SKSearchStatusException(SKSearchStatus searchStatus)
 {
     _searchStatus = searchStatus;
 }