Xamarin / Android:位置只能在仿真中使用,而不能在物理设备上使用

时间:2019-01-30 17:19:55

标签: c# android xamarin android-gps

我正在使用Xamarin构建一个Android应用,该应用列出了许多商店,并告诉您它们有多远。我已经可以在Android模拟器中使用它了。但是,当我在物理设备(三星Galaxy S5 / LineageOS 15.1 / Android 8.1.0)上调试时,似乎没有收到位置更新。其他使用位置数据的应用程序也可以正常工作,例如Google Maps。

该应用程序请求许可,并且我确保确实调用了以下功能StartRequestingLocationData()

但是,当应用程序在物理设备上运行时,OnLocationChanged(Location location)永远不会被调用。在仿真器中,一切正常,它可以在启动时立即给出位置,并在输入新位置数据时不断更新。

我很乐意提供错误消息或以某种方式更彻底地讲授,但是我看不出任何有关其原因的线索。例如,我在输出中看不到任何错误或警告。

这是我的第一个Android应用程序(尽管我在许多其他平台上都有经验),所以我很可能会丢失一些对其他人显而易见的东西。我的问题是我不知道该在哪里寻找线索,并且在线搜索也无法解决这个问题。

这是相关的代码。预先感谢。

    public void StartRequestingLocationData()
    {
        this.location_manager = (LocationManager)GetSystemService(Context.LocationService);

        Criteria crit = new Criteria();
        crit.Accuracy = Accuracy.Fine;
        crit.AltitudeRequired = false;
        crit.BearingRequired = false;
        crit.SpeedRequired = false;

        // Both the emulator and physical device report this as "gps".
        string provider = this.location_manager.GetBestProvider(crit, true);

        this.location_manager.RequestLocationUpdates(provider, 1, 1, this);

        Location last_location = this.location_manager.GetLastKnownLocation(provider);
        if (last_location != null)
        {
            this.OnLocationChanged(last_location);
        }
    }

    public void OnLocationChanged(Location location)
    {
        foreach (Replenisher store in this.stores)
        {
            if (store.DistanceView != null)
            {
                LatLng store_loc = new LatLng(double.Parse(store.GPSN), double.Parse(store.GPSW));
                LatLng our_loc = new LatLng(location.Latitude, location.Longitude);
                double distance = Meters.ComputeDistanceBetween(our_loc, store_loc);

                store.DistanceView.Text = GetString(
                    Resource.String.kilometers_away,
                    distance / 1000
                );
                store.DistanceView.Visibility = ViewStates.Visible;
            }
        }
    }

0 个答案:

没有答案