Đây là tình huống của tôi. Tôi đang phát triển một ứng dụng iPhone sử dụng Vị trí chính để xác định vị trí của thiết bị. Có một biểu tượng: Biểu tượng Dịch vụ Vị trí, xuất hiện trên thanh trạng thái của thiết bị. Tôi biết đủ để nói rằng mục đích của biểu tượng là cho người dùng biết rằng Dịch vụ vị trí hiện đang được sử dụng bởi một thứ gì đó. Đối với người dùng cảm nhận, điều này có nghĩa là giảm tuổi thọ pin. Vì lý do đó, tôi muốn chắc chắn rằng biểu tượng chỉ được hiển thị khi Dịch vụ vị trí thực sự được ứng dụng của tôi sử dụng.Điều gì quyết định sự hiện diện của biểu tượng Dịch vụ vị trí iPhone trên thanh trạng thái?
Nhập nhầm lẫn. Chúng tôi, là nhà phát triển, không có quyền truy cập vào thanh trạng thái thông qua SDK chính thức. Điều này có nghĩa là hệ điều hành sẽ tự động hiển thị biểu tượng đó dựa trên hành vi của ứng dụng. Hãy thử như tôi có thể, tôi không thể tìm thấy một định nghĩa rõ ràng về những gì chính xác khiến cho biểu tượng đó xuất hiện.
Vì nó đứng, biểu tượng xuất hiện trước khi ủy quyền ứng dụng của tôi được kiểm soát và vẫn hiển thị miễn là ứng dụng được cài đặt, đang chạy hay không. Đây rõ ràng là trường hợp xấu nhất có thể, và nó làm tôi nghi ngờ việc sử dụng của tôi là CLLocationManager
. Tôi sẽ giải thích về cách sử dụng của mình, nhưng trong trường hợp cực đoan, tôi đã cố gắng loại bỏ khung CoreLocation (và khung công tác MapKit, mà tôi nghi ngờ cũng sử dụng CoreLocation) và tất cả các mã liên quan đến vị trí. Ứng dụng vẫn khiến biểu tượng xuất hiện và ở lại cho đến khi tôi xóa ứng dụng. Sau đó tôi đã tạo một ứng dụng hoàn toàn mới và không thực hiện thay đổi nào ngoại trừ việc thay đổi số nhận dạng ứng dụng để khớp với số nhận dạng ứng dụng của tôi. Biểu tượng vẫn xuất hiện. Tôi đã thay đổi số nhận dạng để sử dụng số nhận dạng của một trong các ứng dụng của tôi không sử dụng vị trí và biểu tượng không xuất hiện. Tôi đã đảm bảo đặt lại thiết bị trong khi thử nghiệm này.
Sự cố này thực sự đang giết tôi. Tôi không thể tưởng tượng ID ứng dụng phải làm gì với biểu tượng Dịch vụ vị trí, nhưng tôi không thấy nguyên nhân nào khác cho sự kiên trì của nó. Nó có vẻ như một Red Herring che giấu vấn đề thực sự, nhưng tôi đang thua lỗ về vấn đề thực sự.
Bạn có bắt đầu cập nhật vị trí ngay sau khi ứng dụng của bạn khởi chạy hoặc đôi khi sau đó (như sau khi nhấn nút)? –
Tôi bắt đầu chúng trong ứng dụngDidBecomeActive: phương thức ủy nhiệm. Vì vậy, ngay sau khi ứng dụng khởi chạy. –
Xem câu trả lời đã chỉnh sửa của tôi. Thật không may, bạn không may mắn về biểu tượng không hiển thị, mặc dù điều đó không nhất thiết có nghĩa là pin đang bị cạn kiệt ở tốc độ cao hơn. –