2011-02-03 3 views

Trả lời

3

Bạn có thể sử dụng đoạn mã sau để xác định tình trạng của dịch vụ Location:

var watcher = new GeoCoordinateWatcher(); 
if (GeoPositionStatus.Disabled == watcher.Status) 
{ 
    // Watcher is disabled. 
}

thực tế hơn, bạn sẽ muốn chú ý nhiều hơn để thay đổi trạng thái (chỉ vì dịch vụ không phải là bị vô hiệu hóa không có nghĩa là bạn có dữ liệu vị trí), vì vậy bạn hãy xem qua số MSDN Documentation để làm việc với dịch vụ Vị trí.

Cũng có một bài đăng hay trên filtering and emulating location data using the Reactive extensions, điều này hoàn hảo cho thử nghiệm thiết bị trước đó, mặc dù để tiết kiệm thời gian cho bạn trước đó, Nhóm Điện thoại Widnows đã phát hành Windows Phone GPS Emulator.

+0

Mã này không hoạt động. Luôn hiển thị "Không có dữ liệu"! – user598328

+0

Bạn có thể cần phải thực sự gọi 'Bắt đầu()' trên trình xem trước và xem các thay đổi trạng thái (đó là lý do tại sao tôi cung cấp cho bạn các liên kết để đọc thêm). Nếu bạn đang chạy trên trình mô phỏng, bạn sẽ gần như chắc chắn nhận được trạng thái 'NoData' mọi lúc, đó là một lý do tốt để sử dụng Trình mô phỏng GPS của Windows Phone, kết thúc tốt đẹp các dịch vụ định vị. –

3

Ngay cả khi bắt đầu GeoCoordinateWatcher, bạn sẽ nhận được NoData nếu cảm biến bị tắt. Những gì bạn nên thử sử dụng thay thế là TryStart:

GeoCoordinateWatcher g = new GeoCoordinateWatcher(); 
MessageBox.Show(g.TryStart(false,TimeSpan.FromSeconds(30)).ToString()); 

Nếu trả về False, điều đó có nghĩa là cảm biến bị vô hiệu hóa. Nếu nó trả về True, nó được kích hoạt. Đặt khoảng thời gian chờ thích hợp (trong đoạn mã trên tôi đang sử dụng 30 giây) và ủy quyền quy trình này cho một chuỗi phụ, vì vậy nó sẽ không treo giao diện người dùng.

+0

Thực tế thú vị: Trong ứng dụng của tôi sử dụng TryStart với vị trí bị vô hiệu hóa khiến ứng dụng bị hỏng, do đó, vâng ... – Esa

2

Bạn có thể thêm sự kiện StatusChanged vào GeoCoordinateWatcher và kiểm tra GeoPositionPermission.Denied trong các quyền khi nó kích hoạt.

watcher = new GeoCoordinateWatcher(); 
watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged); 
watcher.Start(); 

void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e) 
{ 

    if (watcher.Permission == GeoPositionPermission.Denied) 
    { 
     // Location services were disabled 
    } 
} 

Hy vọng điều đó sẽ hữu ích.

4
  GeoCoordinateWatcher g = new GeoCoordinateWatcher(); 
      g.Start(); 
      if (g.Permission.Equals(GeoPositionPermission.Granted)) 
      { 
       //Your location services is enabled. Go ahead. 
       //Your codes goes here. 
      } 
      else if (g.Permission.Equals(GeoPositionPermission.Denied) || g.Permission.Equals(GeoPositionPermission.Unknown)) 
      {      
       MessageBox.Show("Location services are disabled. To enable them, Goto Settings - Location - Enable Location Services.", "Location services", MessageBoxButton.OK); 
      } 
+0

câu trả lời chính xác đã hoạt động – LojiSmith

+0

Điều này liên tục không xác định cho tôi, câu trả lời của Chris R đã cung cấp trạng thái chính xác. – jlunavtgrad

0

Làm cái này dựa trên TeJ'sanswer.

public override void OnNavigatedTo() 
    {    
     using (var watcher = new GeoCoordinateWatcher()) 
     { 
      try 
      { 
       watcher.Start(); 
      } 
      finally 
      { 
       IsAllowedInSystem = watcher.Permission.Equals(GeoPositionPermission.Granted); 
       watcher.Stop(); 
      } 
     } 
    } 

Và ứng dụng của tôi 'ToggleSwitch.IsEnabled được liên kết với IsAllowedInSystem. Khi tôi đang chuyển sang Dịch vụ vị trí, tắt nó và quay trở lại ứng dụng, ToggleSwitch của tôi bị tắt (cũng là một chuỗi "Vui lòng bật Dịch vụ vị trí trong cài đặt Hệ thống" hiển thị). Khi tôi đang chuyển sang Dịch vụ vị trí, bật nó và quay lại ứng dụng của tôi, ToggleSwitch của tôi được bật và người dùng có thể thiết lập nó.