2015-01-06 19 views
6

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:

  1. Khởi tạo trình quản lý trung tâm với mã định danh khôi phục. Delegate = tự.
  2. Triển khai phương thức ủy quyền willRestoreState. NSLog something
  3. 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. :)

+0

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

Trả lời

8

Cuối cùng đã thực hiện một số thử nghiệm và nhận kết quả. Nó chỉ ra rằng các ứng dụng được đưa vào nền khi cần thiết, có nghĩa là bất cứ khi nào thiết bị ngoại vi gửi dữ liệu trên kết nối được bảo tồn. iOS khởi chạy ứng dụng thông qua didFinishLaunchingWithOptions trong trường hợp này, vì vậy bạn có ~ 10 giây để kiểm tra tùy chọn khởi chạy của bạn và làm điều gì đó. Vì vậy, vấn đề của tôi liên quan đến thực tế là không có dữ liệu được gửi trên kết nối, có vẻ như bây giờ chúng ta phải thay đổi phần vững của thiết bị ngoại vi của chúng tôi để sắp xếp điều này.

Người được ủy quyền willRestoreState được gọi khi khởi chạy lại ứng dụng theo cách thủ công. Tại thời điểm này, iOS cung cấp không chỉ trung tâm được sử dụng gần đây mà còn là danh sách các thiết bị ngoại vi được kết nối và thậm chí cả các dịch vụ đã đăng ký gần đây. Vì vậy, tôi chỉ cần khôi phục lại các đối tượng của mình và nhận được đặc tính đã đăng ký từ dịch vụ phù hợp của thiết bị ngoại vi được kết nối để có đầy đủ chức năng một lần nữa.

+3

Hi STEX, bạn sẽ vui lòng giúp tôi biết "Tôi chỉ có để khôi phục lại đối tượng của tôi và nhận được đặc trưng đăng ký từ các dịch vụ bên phải của thiết bị ngoại vi được kết nối lại đầy đủ chức năng. " Tôi đang phải đối mặt với vấn đề tương tự và không có khả năng để làm cho ứng dụng của tôi một lần nữa chức năng như tôi nhận được thiết bị ngoại vi của tôi phản đối nhưng tôi cần phải gửi lệnh kết nối lại để tạo kết nối hoặc tôi chỉ phải thiết lập các phương pháp đại biểu. Cảm ơn trước. – Nik

Các vấn đề liên quan