【问题标题】:onLocationChanged not getting called - Xamarin.AndroidonLocationChanged 没有被调用 - Xamarin.Android
【发布时间】:2015-10-10 23:23:33
【问题描述】:

下面是一个获取位置的服务类。但是 onLocationChanged 调用 bask 方法没有被调用。遵循找到的文档here。我的服务开始没有问题,但是回调方法没有被调用,也没有任何异常。有人可以查看代码并告诉我是否遗漏了什么。谢谢。

[Service]
    public class LocationService : Service, ILocationListener
    {
        public static LocationManager locMgr;

        [Obsolete ("deprecated")]
        public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId){

            Console.WriteLine ("LocationService-OnStartCommand");
            locMgr = (LocationManager)GetSystemService(LocationService);
            Criteria criteriaForLocationService = new Criteria
            {
                Accuracy = Accuracy.Fine
            };
            IList<string> acceptableLocationProviders = locMgr.GetProviders(criteriaForLocationService, true);
            string Provider;
            if (acceptableLocationProviders.Any())
            {
                Provider = acceptableLocationProviders.First();
                Console.WriteLine ("LocationService-acceptableLocationProviders.Any()");
            }
            else
            {
                Provider = String.Empty;
                Console.WriteLine ("LocationService-String.Empty");
            }

            if(locMgr.IsProviderEnabled(Provider))
            {
                Console.WriteLine ("LocationService-Provider enabled: "+Provider);
                locMgr.RequestLocationUpdates (Provider, 0, 0, this);
            }
            else
            {
                Console.WriteLine(" Provider is not available. Does the device have location services enabled?");
            }

            return StartCommandResult.Sticky;
        }

        public void OnLocationChanged (Location location)
        {
            Toast.MakeText (Application.Context, "location changed", ToastLength.Short).Show();
            Console.WriteLine ("LocationService-OnLocationChanged");
            Console.WriteLine (""+location.Latitude);
        }

        public void OnProviderDisabled (string provider)
        {
        }

        public void OnProviderEnabled (string provider)
        {
        }

        public void OnStatusChanged (string provider, Availability status, Bundle extras)
        {
        }

        #region implemented abstract members of Service
        public override IBinder OnBind (Intent intent)
        {
            return null;
        }
        #endregion

        public override void OnDestroy ()
        {
            base.OnDestroy ();
            Console.WriteLine ("LocationService-OnDestroy");
            locMgr.RemoveUpdates (this);
        }
    }

【问题讨论】:

    标签: android xamarin geolocation location xamarin.android


    【解决方案1】:

    这里:locMgr.RequestLocationUpdates (Provider, 0, 0, this);

    在第二个和第三个参数中输入除 0 以外的值(分别是最小间隔和更新之间的最小距离)。

    【讨论】:

    • 我也尝试过其他值。在 2000 年之前,分别是 1,但仍然有效
    • 可以把所有Console.WriteLine的logcat放上去吗?
    • 我使用 _locMgr.RequestLocationUpdates(locationProvider,5, 1, this); 5 = 米
    猜你喜欢
    • 2023-03-07
    • 1970-01-01
    • 2017-05-14
    • 2016-09-18
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    相关资源
    最近更新 更多