hy vọng nhận được một số đầu vào tại đây.iOS CoreBluetooth: Bảo tồn và Phục hồi Nhà nước
Trong dự án iOS hiện tại của tôi, tôi đang sử dụng CoreBluetooth nhanh chóng. Các ứng dụng được kích hoạt để giao tiếp bằng cách sử dụng CoreBluetooth trong nền mà về cơ bản hoạt động, loại. Thiết bị ngoại vi yêu cầu phải có kết nối hoạt động với thiết bị iOS để hoạt động như mong đợi. Bất cứ khi nào ngắt kết nối, thiết bị ngoại vi sẽ dừng hoạt động hiện tại. Điều này cũng xảy ra khi ứng dụng bị đóng do áp lực bộ nhớ. Trong trường hợp đó các thiết bị ngoại vi không nên ngừng hoạt động, do đó, có một vấn đề. Để giải quyết nó, tôi đã theo dõi apples core bluetooth programming guide để triển khai chế độ bảo quản và khôi phục trạng thái cơ bản về cơ bản:
- Khởi tạo trình quản lý trung tâm với mã định danh khôi phục. Delegate = tự.
- Triển khai phương thức ủy quyền willRestoreState. NSLog something
- Kiểm tra khởi chạyMở khóa cho một phím đặc biệt. NSLog cái gì đó.
Tôi buộc iOS đóng ứng dụng trong khi đang ở chế độ nền sử dụng dự án chung này: BackgroundKill. Tất nhiên các ứng dụng không chạy trong chế độ gỡ lỗi nữa, đó là lý do tại sao tôi đã thêm một số câu lệnh NSLog tại các điểm quan trọng cần tìm trong bảng điều khiển thiết bị. Tin tốt: kết nối sẽ không bị hủy nữa khi ứng dụng bị chấm dứt, iOS hiện đang hoạt động như mong đợi để giữ kết nối để thiết bị ngoại vi không ngừng hoạt động. Đình công! Không có thông tin liên lạc giữa trung tâm và ngoại vi trong thời gian này ngoại trừ dịch vụ pin mà ứng dụng được đăng ký. Lý do duy nhất để có kết nối hoạt động là ngăn thiết bị ngoại vi ngừng hoạt động.
Khi khởi chạy lại ứng dụng theo cách thủ công ngay bây giờ, không có NSLog nào được đề cập nào xuất hiện. Đại biểu willRestoreState không bao giờ được gọi và launchOptions là không. Tôi đã cố gắng sử dụng hàng đợi "DISPATCH_QUEUE_CONCURRENT" thay vì nil khi instantiating CentralManager. Không có hiệu lực.
Tôi phải sử dụng kết nối được bảo tồn như thế nào khi khởi chạy lại ứng dụng? Tại sao đại biểu willRestoreState không bao giờ được gọi? Am i thiếu cái gì ở đây? Có bắt buộc phải nhận dữ liệu trong khi đang được nền/lực lượng đóng cửa bởi hệ thống để sử dụng việc bảo tồn và phục hồi nhà nước không?
Cảm ơn bạn đã trợ giúp. :)
willRestoreState sẽ được gọi ngay sau khi ứng dụng của bạn đã được khôi phục trong nền. Khởi chạy ứng dụng sau, từ biểu tượng, có thể không làm gì đặc biệt, vì nó đang chạy.Cũng theo tài liệu, nếu không có gì để khôi phục lại - Phương pháp didUpdateState sẽ được gọi đầu tiên, thay vì willRestoreState – KoCMoHaBTa