跟踪Windows Phone 8中的位置时出现异常

时间:2013-09-11 21:51:19

标签: c# exception geolocation windows-phone-8-emulator

当我尝试跟踪位置时,它工作得很好但是当我添加服务引用时它会引发异常 当我尝试相同的程序而不添加位置时只添加服务引用它完美地工作 从How to continuously track the phone's location for Windows Phone 8

复制时,我的代码如下所示
public partial class MainPage : PhoneApplicationPage
{

    Geolocator geolocator = null;
    bool tracking = false;
    ServiceReference2.GetPositionClient client = new ServiceReference2.GetPositionClient();
    // Constructor
    public MainPage()
    {
        InitializeComponent();

        // Sample code to localize the ApplicationBar
        //BuildLocalizedApplicationBar();
    }
    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        if (IsolatedStorageSettings.ApplicationSettings.Contains("LocationConsent"))
        {
            // User has opted in or out of Location
            return;
        }
        else
        {
            MessageBoxResult result =
                MessageBox.Show("This app accesses your phone's location. Is that ok?",
                "Location",
                MessageBoxButton.OKCancel);

            if (result == MessageBoxResult.OK)
            {
                IsolatedStorageSettings.ApplicationSettings["LocationConsent"] = true;
            }
            else
            {
                IsolatedStorageSettings.ApplicationSettings["LocationConsent"] = false;
            }

            IsolatedStorageSettings.ApplicationSettings.Save();
        }
    }
    private void TrackLocation_Click(object sender, RoutedEventArgs e)
    {
        if ((bool)IsolatedStorageSettings.ApplicationSettings["LocationConsent"] != true)
        {
            // The user has opted out of Location.
            return;
        }

        if (!tracking)
        {
            geolocator = new Geolocator();
            geolocator.DesiredAccuracy = PositionAccuracy.High;
            geolocator.MovementThreshold = 100; // The units are meters.

            geolocator.StatusChanged += geolocator_StatusChanged;
            geolocator.PositionChanged += geolocator_PositionChanged;

            tracking = true;
            TrackLocationButton.Content = "stop tracking";
        }
        else
        {
            geolocator.PositionChanged -= geolocator_PositionChanged;
            geolocator.StatusChanged -= geolocator_StatusChanged;
            geolocator = null;

            tracking = false;
            TrackLocationButton.Content = "track location";
            StatusTextBlock.Text = "stopped";
        }
    }
    void geolocator_StatusChanged(Geolocator sender, StatusChangedEventArgs args)
    {
        string status = "";

        switch (args.Status)
        {
            case PositionStatus.Disabled:
                // the application does not have the right capability or the location master switch is off
                status = "location is disabled in phone settings";
                break;
            case PositionStatus.Initializing:
                // the geolocator started the tracking operation
                status = "initializing";
                break;
            case PositionStatus.NoData:
                // the location service was not able to acquire the location
                status = "no data";
                break;
            case PositionStatus.Ready:
                // the location service is generating geopositions as specified by the tracking parameters
                status = "ready";
                break;
            case PositionStatus.NotAvailable:
                status = "not available";
                // not used in WindowsPhone, Windows desktop uses this value to signal that there is no hardware capable to acquire location information
                break;
            case PositionStatus.NotInitialized:
                // the initial state of the geolocator, once the tracking operation is stopped by the user the geolocator moves back to this state

                break;
        }

        Dispatcher.BeginInvoke(() =>
        {
            StatusTextBlock.Text = status;
        });
    }





    void geolocator_PositionChanged(Geolocator sender, PositionChangedEventArgs args)
    {
        client.getPosCompleted += new EventHandler<ServiceReference2.getPosCompletedEventArgs>(sendData);

        client.getPosAsync(11,11);


        Dispatcher.BeginInvoke(() =>
        {
            LatitudeTextBlock.Text = args.Position.Coordinate.Latitude.ToString("0.00");
            LongitudeTextBlock.Text = args.Position.Coordinate.Longitude.ToString("0.00");
        });
    }


    public void sendData(object sender, ServiceReference2.getPosCompletedEventArgs e)
    {

        dd.Text = e.Result;

    }
    }

2 个答案:

答案 0 :(得分:0)

你有

client.getPosCompleted += new EventHandler<ServiceReference2.getPosCompletedEventArgs>(sendData);

但是你还没有在其他任何地方给客户端任何值,我假设你得到一个null引用异常,这就是原因。

答案 1 :(得分:0)

它只是解决了它,只是设置IIS的错误,因为移动设备和个人电脑在不同的网络上,因此通信是不可能的。我只是在路由器设置中转发端口 -