2013-04-08 23 views
6

Tôi có mã tạo ra một geofence trên iPhone của tôi sẽ kích hoạt một số mã được thực hiện khi didExitRegion được gọi. Tuy nhiên, tôi đã thấy rằng khi tôi đã tắt WiFi mà didExitRegion không bao giờ được kích hoạt. WiFi có cần thiết cho các thay đổi theo dõi vùng trên iOS không? Độ chính xác mong muốn của tôi được đặt thành kCLLocationAccuracyHundredMeters. Tôi đang thử nghiệm trên iOS 6.1 và iPhone 4.iOS - Geofencing with WiFi tắt

Đây là mã của tôi cho việc thiết lập theo dõi vị trí:

- (id)init { 
self = [super init]; 
if (self) { 
    CLLocationManager *manager = [[CLLocationManager alloc] init]; 
    manager.delegate = self; 
    manager.desiredAccuracy = kCLLocationAccuracyHundredMeters; 
    manager.distanceFilter = RADIUS/10.0; 
    manager.headingFilter = kCLHeadingFilterNone; 
    self.locationManager = manager; 
    self.authorizationStatus = [CLLocationManager authorizationStatus]; 
} 
return self; 
} 

Cảm ơn

Trả lời

11

Thiết bị iOS sử dụng ba phương pháp để khám phá vị trí của người dùng. Từ (thường) chính xác nhất để tối thiểu chính xác đó là:

  1. GPS phần cứng
  2. Bằng cách xác định mạng wifi lân cận
  3. di Tháp tam giác

Nếu ứng dụng của bạn không sử dụng GPS hoặc là không chạy (tức là trước đây đã bị chấm dứt), thiết bị sẽ cố gắng sử dụng các phương thức 2 và 3 ở trên để định vị người dùng. Vì vậy, khả năng của thiết bị để xác định vị trí người sử dụng (khi phần cứng GPS không được sử dụng hoặc có một tín hiệu GPS yếu) phụ thuộc vào sự sẵn có của các mạng wifi và tháp di động. Các mạng wifi và tháp di động càng nhiều thì độ chính xác vị trí càng tốt. Do đó, khi người dùng vào hoặc thoát khỏi một vùng được giám sát (ví dụ: đi qua một "geofence"), không thể dự đoán chính xác khi nào người dùng sẽ nhận được thông báo nếu có. (Tất nhiên, nếu khu vực được đề cập luôn giống nhau, thiết bị sẽ ít nhiều xác định vị trí người dùng có cùng độ chính xác trong từng dịp).

Dưới đây là các tài liệu có liên quan từ Location Awareness Programming Guide:

Khoảng cách ngưỡng cụ thể được xác định bởi phần cứng và các công nghệ vị trí đó hiện đang có sẵn. Ví dụ: nếu Wi-Fi bị tắt, việc theo dõi vùng sẽ kém chính xác hơn đáng kể. Tuy nhiên, với mục đích thử nghiệm, bạn có thể giả định rằng khoảng cách tối thiểu là khoảng 200 mét.

Vì vậy, không cần wifi để giám sát khu vực hoạt động, thiết bị của bạn sẽ có cơ hội tốt hơn trong việc xác định người dùng có vượt qua vị trí địa lý của khu vực hay không.

+0

chắc chắn chính xác. bạn không bao giờ có thể tắt wifi trong cài đặt hệ thống, thậm chí bạn không sử dụng WIFI. – Jacky

+0

@Jacky - Tôi có thể tắt wi-fi trên iPhone, trên iOS 7. Tôi quét từ cạnh dưới lên trên, và tôi có Trung tâm điều khiển. Sau đó, tôi chuyển đổi biểu tượng wi-fi (AirPort). –

+0

Ứng dụng có thể chọn chỉ sử dụng một số phương pháp cụ thể trong số ba phương pháp này không? Các ứng dụng Citymapper nói rằng geofencing của nó không sử dụng chip GPS. Điều này có thể không? –

2

Nếu bạn tắt WiFi, độ chính xác vị trí của bạn giảm. Nếu bạn không có tín hiệu GPS (bên trong một số tòa nhà), bạn sẽ không nhận được bất kỳ cập nhật vị trí nào. Bạn đã thử điều này khi bạn ở bên ngoài hay bạn đã sử dụng trình mô phỏng vị trí để kiểm tra chưa?

Ngoài ra, WiFI không bắt buộc đối với chức năng geofence nếu bạn có GPS (iPhone hoặc iPad có sim).

+2

Hey, Vâng tôi đã thử nghiệm nó bên ngoài, không phải bên trong. Tôi đã thử nghiệm nó bằng cách đi bộ xung quanh nơi tôi nên vi phạm geofence. Khi wifi bị tắt, nó không bao giờ vi phạm geofence. Tôi hiểu rằng tắt wifi làm giảm độ chính xác vị trí nhưng không đến một điểm mà geofencing chỉ không hoạt động? –

+0

Nó có thể có nghĩa là một vài điều. Bạn đã thoát khỏi hàng rào khi tắt WiFi vì sự khác biệt về độ chính xác và Apple không gọi lại cho bạn. Những điều kỳ lạ có thể xảy ra. Tôi sẽ kiểm tra nó bằng cách thiết lập độ chính xác của bạn đến 10 mét, sau đó thiết lập geofence của bạn bằng cách sử dụng GPS chỉ với Wifi ra và bán kính của bạn 100 mét. Và thử nghiệm didExitRegion được kích hoạt. – mskw

2

Công cụ lạ kỳ lạ có thể xảy ra mà không cần wifi sử dụng vị trí chính. Để giúp đỡ trong trường hợp của bạn, tôi sẽ loại bỏ bộ lọc khoảng cách, điều đó có thể gây rối với mọi thứ và nó không phải là rất hữu ích. Tôi có lẽ sẽ chỉ sử dụng kCLLocationAccuracyBest cho bất cứ điều gì mà tôi cần độ chính xác cần thiết để thiết lập một geofence. Sử dụng độ chính xác khác và bộ lọc cho tôi đôi khi sẽ thông qua đồng hồ đo GPS giảm 1000 mét và mất một hoặc hai phút để sửa chữa chính nó. Nếu đây là quá nhiều pin, sau đó thiết lập một hệ thống mà nó tắt và trên dựa trên cách xa nó là từ hàng rào.