2009-12-13 21 views
9

Tôi có thể phát hiện thấy iPhone đã chuyển sang chế độ ngủ và trở về sau khi ngủ, bằng cách sử dụng ứng dụngWillResignActive và applicationDidBecomeActive. Nhưng làm thế nào để tôi tìm ra loại gián đoạn nào. Tôi đang tạo một ứng dụng trình phát âm thanh và cần phải phát âm thanh khi iPhone chuyển sang chế độ ngủ (mà tôi biết cách thực hiện). Nhưng tôi cần phải ngắt âm thanh khi một tin nhắn, báo động hoặc ngắt pin thấp xảy ra. Ngoài ra tôi cần phải tiếp tục âm thanh khi sự kiện kết thúc.Phát hiện loại iPhone bị gián đoạn

Vậy làm cách nào để phân biệt giữa các ngắt khác nhau này.

Trả lời

5

Thông tin đó có thể không có sẵn cho ứng dụng của bạn, nhưng đây là một số điều cần thử.

  1. applicationWillResignActive:, kiểm tra đối tượng NSNotification và thuộc tính userInfo để xem có bất kỳ gợi ý nào không.

  2. Đăng ký để nhận tất cả thông báo được đưa lên trung tâm thông báo mặc định:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveNotification:) name:nil object:nil]; 
    

phương pháp của bạn sẽ được gọi khi bất cứ điều gì được đăng tải. Đăng nhập đối tượng thông báo và từ điển userInfo và có thể bạn sẽ thấy một thông báo hữu ích được đăng. Nếu bạn tìm thấy một, bạn có thể đăng ký chỉ cho điều đó.

  1. Đây là hacky nhất, nhưng bạn có thể truy cập vào cảnh báo được hiển thị nếu đó là thông báo hoặc cảnh báo pin. Cảnh báo được hiển thị trong UIWindow qua giao diện người dùng chính của ứng dụng. Bạn có thể đăng ký UIWindowDidBecomeVisibleNotification, sau đó xem các phần phụ của cửa sổ để xem bạn có thể tìm thấy một cảnh báo hay một số đầu mối hữu ích khác không.

Tất cả các phương pháp trên sẽ phụ thuộc vào hành vi không có giấy tờ để hoạt động và có thể khiến nội dung bạn gửi bị từ chối khỏi App Store. Không ai trong số họ liên quan đến các cuộc gọi phương thức riêng tư, mặc dù bạn có thể cho rằng việc quan sát tên thông báo không có giấy tờ được tính là API riêng tư. Cuối cùng, ý kiến ​​của Apple là ý kiến ​​duy nhất quan trọng.

Cá nhân, tôi sẽ thử, đảm bảo mã không thành công nếu và khi hệ thống thay đổi.

+1

Đã cố gắng A và B nhưng tất cả đều trống. Không có cặp Mô tả hoặc Khóa-giá trị nào trong userinfo. Không có gì trong đối tượng. Lạ lùng của nó như thế nào táo bỏ qua để đưa vào chức năng đơn giản như vậy. Đã không thử C, vì nó có vẻ quá hacky, ngay cả với tôi. – Prashant

+1

Bạn có thể muốn xem xét lại C: nếu bạn chỉ đơn giản giả định rằng bất kỳ * cảnh báo nào được hiển thị trên ứng dụng của bạn là lý do để tạm dừng nhạc, bạn sẽ không thực hiện bất kỳ điều gì không có giấy tờ. Nó chỉ chọc quanh hệ thống phân cấp khung nhìn để đọc văn bản cảnh báo có thể bị hack. – benzado