2015-09-01 15 views
6

La nuova API per la geolocalizzazione in Windows Universal (app di Windows 10) ha un nuovo modo per consentire l'accesso alla posizione di un utente.Autorizzazioni API di geolocalizzazione Windows universale (UWP)

A partire da Windows 10, chiamare il metodo RequestAccessAsync prima di accedere alla posizione dell'utente. A quel punto, la tua app deve essere in primo piano e RequestAccessAsync deve essere chiamato dal thread dell'interfaccia utente.

Sto eseguendo un codice molto semplice per la geolocalizzazione, sul thread dell'interfaccia utente come mostrato di seguito, ma ottengo il permesso di posizione "negato" ogni volta e nessun prompt per consentire le autorizzazioni di posizione. Qualcun altro ha incontrato questo? Come si ottiene la richiesta di consentire le autorizzazioni di posizione per la geolocalizzazione in un'app di Windows 10?

metodo Geolocalizzazione

private async Task<ForecastRequest> GetPositionAsync() 
    { 
     try 
     { 

      // Request permission to access location 
      var accessStatus = await Geolocator.RequestAccessAsync(); 

      if (accessStatus == GeolocationAccessStatus.Allowed) 
      { 
       // Get cancellation token 
       _cts = new CancellationTokenSource(); 
       CancellationToken token = _cts.Token; 

       // If DesiredAccuracy or DesiredAccuracyInMeters are not set (or value is 0), DesiredAccuracy.Default is used. 
       Geolocator geolocator = new Geolocator { DesiredAccuracyInMeters = _desireAccuracyInMetersValue }; 

       // Carry out the operation 
       _pos = await geolocator.GetGeopositionAsync().AsTask(token); 

       return new ForecastRequest() 
       { 
        Lat = (float)_pos.Coordinate.Point.Position.Latitude, 
        Lon = (float)_pos.Coordinate.Point.Position.Longitude, 
        Unit = Common.Unit.us 
       }; 
      } 
      else 
       throw new Exception("Problem with location permissions or access"); 

     } 
     catch (TaskCanceledException tce) 
     { 
      throw new Exception("Task cancelled" + tce.Message); 
     } 
     finally 
     { 
      _cts = null; 
     } 
    } 

Dove si chiama:

protected async override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     base.OnNavigatedTo(e); 

     ForecastViewModel vm = await ForecastViewModel.BuildViewModelAsync(await GetPositionAsync()); 
     DataContext = vm.Forecast; 

     uxForecastList.Visibility = Visibility.Visible; 
    } 
+1

Hai aggiunto "Location" come capacità nel manifest dell'app? –

risposta

Problemi correlati