2010-10-09 3 views
12

Tôi đang tạo một ứng dụng đồng hồ báo thức với hỗ trợ đa nhiệm. Tuy nhiên, tôi đang mắc kẹt với một số hạn chế của sdk.iOS 4 Ứng dụng đồng hồ báo thức với hỗ trợ đa nhiệm

Tôi cần phát âm thanh báo thức được chọn bất cứ khi nào thời gian báo thức đi kèm với một số thuộc tính do người dùng đặt. Các thuộc tính này: - Âm báo thức có thể là nhạc từ thư viện iPod của người dùng và cũng có một số tệp âm thanh trong gói ứng dụng. - Âm thanh báo thức có thể được đặt để phát như tiến bộ.

Hơn nữa, âm báo thức phải được phát trong nền trong vòng lặp cho đến khi người dùng hủy hoặc đánh thức ứng dụng.

Điều đầu tiên mà tôi nghĩ là sử dụng thông báo cục bộ, nhưng với thông báo cục bộ, bạn có thể phát tệp âm thanh chỉ trong gói ứng dụng (không phải nhạc iPod) và dài tối đa 30 giây. Ngoài ra, bạn sẽ không được thông báo khi người dùng hủy cảnh báo thông báo, iOS chỉ dừng phát âm thanh của bạn.

Bây giờ tôi đang nghĩ đến việc sử dụng tùy chọn phát âm thanh nền và phát im lặng cho đến thời gian báo thức, sau đó phát âm báo thức trong khi hiển thị thông báo cục bộ mà không có âm thanh. Nhưng một lần nữa làm thế nào tôi sẽ biết nếu người dùng hủy bỏ cảnh báo thông báo địa phương và ngừng chơi âm thanh. Tuy nhiên theo tài liệu của Apple, việc phát nhạc trên iPod (và sử dụng tài nguyên được chia sẻ) vẫn không được phép đối với một ứng dụng đang phát âm thanh nền.

Tôi cũng không thể hiểu cách một số ứng dụng khác đang thực hiện một số tính năng này. Ví dụ: Night Stand HD có thể phát nhạc iPod trong khi ở chế độ nền và ứng dụng có tên "Progressive Alarm Clock" có thể phát âm thanh tiến bộ trong khi ở chế độ nền.

Bất kỳ ý tưởng và đề xuất nào về những vấn đề này? Bất kỳ sự trợ giúp nào của bạn sẽ được đánh giá rất cao

+0

Tôi không có kinh nghiệm về nền nhưng không phải là sau đây cung cấp cho bạn các câu trả lời cần thiết: http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/BackgroundExecution/BackgroundExecution.html – hol

Trả lời

4

Tôi sẽ nói những gì bạn muốn làm là không thể với các hạn chế hiện tại của iOS. Điều đó nói rằng bạn có thể có thể giả mạo một báo động tiến bộ bằng cách làm những gì các nhà phát triển của Progressive Alarm Clock làm để chơi báo động tiến bộ. Bằng cách lên lịch nhiều thông báo cục bộ, một thông báo cho nhau. Anh ta đã phân chia âm thanh báo động thành những mẩu 10 giây với mức âm lượng lũy ​​tiến. Đây là một ví dụ rất thô sơ cho thấy cách báo động tiến bộ có thể được giả mạo.

UILocalNotification *notif1 = [[UILocalNotification alloc] init]; 
notif1.fireDate = [NSDate dateWithTimeIntervalSinceNow:15]; 
notif1.soundName = UILocalNotificationDefaultSoundName; 
notif1.alertBody = @"Alarm"; 
[[UIApplication sharedApplication] scheduleLocalNotification:notif1]; 
[notif1 release]; 

UILocalNotification *notif2 = [[UILocalNotification alloc] init]; 
notif2.fireDate = [NSDate dateWithTimeIntervalSinceNow:20]; 
notif2.soundName = UILocalNotificationDefaultSoundName; 
[[UIApplication sharedApplication] scheduleLocalNotification:notif2]; 
[notif2 release]; 

Điều này trước tiên sẽ hiển thị thông báo và phát âm thanh mặc định sau 15 giây. Sau 5 giây, âm thanh sẽ được phát lại. Bởi có một loạt các tập tin âm thanh, nơi âm lượng đang tăng âm thanh tiến bộ có thể được giả mạo chỉ bằng cách lên lịch các thông báo địa phương hơn. Điều này tất nhiên sẽ chỉ hoạt động nếu bạn có âm thanh báo động có thể dễ dàng chia thành nhiều phần, giống như chuông trong Đồng hồ báo thức Progressive. Rất tiếc, bạn không thể hủy báo thức bằng cách nhấn vào hủy trong thông báo. Bạn phải bắt đầu ứng dụng để làm điều đó.

1

Dù nhà phát triển đồng hồ báo thức Progressive đang làm gì, nó không phải là những gì Robert Höglund mô tả, AFAIK, vì báo thức sẽ phát ra ngay cả khi điện thoại ở chế độ im lặng và UILocalNotification dường như không có cách nào để cho phép . Ngoài ra, nếu bạn giết ứng dụng theo cách thủ công trong khi báo thức đang chờ xử lý, ứng dụng sẽ thông báo cho bạn biết rằng ứng dụng cần khởi chạy lại. Điều này dường như gợi ý rằng nó phải bằng cách nào đó chạy trong nền.

+0

Nhìn vào câu hỏi thường gặp của họ, rõ ràng là họ không sử dụng UILocalNotification nhưng một số phương pháp khác. Xem https://insighttimer.com/pac_help – avance