2013-08-12 44 views
7

Tôi đang viết một ứng dụng iOS và tôi muốn tạm dừng nội dung chuyển động ứng dụng của tôi khi hệ điều hành quyết định để hiển thị một thông báo Banner như thế này:Tôi làm cách nào để được thông báo về thông báo biểu ngữ trong iOS?

Banner Notification

Có một hệ thống NSNotification mà tôi có thể quan sát hoặc một phương pháp được gọi là tôi có thể phản ứng lại không? Tôi đã thử applicationWillResignActive, nhưng điều đó không được gọi trong trường hợp này.

+1

Bắn giá rẻ: Khung hoặc giới hạn của cửa sổ có thay đổi không? Nếu vậy, bạn có thể thử KVO trên giới hạn của cửa sổ ứng dụng không? – Moshe

+0

Trả lời ngắn gọn: Không có gì hợp pháp. APNS được thiết kế như một mô hình máy khách-máy chủ, vì vậy bạn sẽ không bao giờ được thông báo về một biểu ngữ không phải của bạn. Trả lời dài: Biểu ngữ thông báo xuất hiện và do đó phải là chế độ xem hoặc lớp. Dù bằng cách nào, tôi có một linh cảm rằng hệ thống phân cấp cửa sổ có thể thay đổi khi một biểu ngữ được hiển thị. – CodaFi

+1

@ CodaFi- Mặc dù tôi đoán là thông báo không có trong cửa sổ * của bạn và hoàn toàn nằm ngoài cấu trúc phân cấp của ứng dụng. – BergQuester

Trả lời

2

Tôi đã đâm vào nó sáng nay và tôi có xu hướng nói rằng không có API công khai cho việc này.

Tôi đã thử sử dụng mã được nêu here và không nhận được bất kỳ thông báo nào. Sau đó, tôi chạy một loạt các "kiểm tra" để xem tôi có thể tìm thấy bất cứ điều gì.

Để kiểm tra, tôi đã tạo một cặp ứng dụng, one to schedule notifications (GitHub link)one to try and "catch" them (GitHub link). Trong ứng dụng Người gửi, tôi có thể gửi N thông báo mỗi N giây. Tôi đã chọn một số giá trị tùy ý cao và gửi chúng.

Trong trình tạo của tôi, tôi đã thử xem xét các giá trị visibleRect lên và xuống phân cấp lớp. (KeyWindow sống trong một lớp, nhưng nó là superview, và super layer.delegate đều là nil) Tôi chưa kiểm tra các ràng buộc, nhưng điều đó không quan trọng. Tôi đã nhìn vào cửa sổ của ứng dụng, nó là nil superview, đó là layer, nó là subviews. Các giới hạn của ứng dụng cũng không bị ảnh hưởng. Các ứng dụng được sandboxed rất tốt, mà bàn đạp và trung tâm thông báo không tồn tại trong thế giới của ứng dụng.

Tôi bắt đầu đi theo con đường truy cập vào các khung công tác riêng tư, nhưng quyết định không đáng để nỗ lực.

Tôi đã mở Công cụ và xem xét mức độ trong suốt của chế độ xem. (Có thể buộc tất cả các khung nhìn trong một hệ thống phân cấp phải mờ đục, và sau đó sử dụng nó để xem biểu ngữ có đang chặn thứ gì đó không? Có lẽ nó không "chặn" nếu nó trong suốt?)

Tôi cũng đã cố gắng thực hiện một ảnh chụp màn hình, và kiểm tra các màu sắc trong khu vực trên cùng của màn hình, nhưng điều đó sẽ không hoạt động vì bạn cần phải chuyển một khung nhìn vào ngữ cảnh. Ngay cả khi nó sẽ hoạt động, nó sẽ không được thực hiện đặc biệt.

Một ý nghĩ khác mà tôi đã có là lắng nghe các thông báo đẩy trên cổng đẩy, nhưng tôi nghi ngờ rằng Apple sẽ cho phép bạn nắm bắt thông báo của một ứng dụng khác. Là một nhà phát triển, tôi sẽ không gửi thông tin cá nhân trong một cảnh báo, nhưng nó vẫn là một mối quan tâm.

Sự thật là biểu ngữ thông báo không thực sự khiến ứng dụng của bạn trở nên không hoạt động, vì vậy tôi không chắc chắn rằng hành vi này là sai. Nếu đó là một sự tiện lợi, hãy gửi một lỗi. Cách yêu cầu DeviceWillShowNotificationNotification?

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