2012-05-17 19 views
7

Chúng tôi đang trong quá trình viết ứng dụng iPhone (sẽ ở chế độ nền) sẽ được thông báo khi có cuộc gọi đến. Ứng dụng thực hiện một số thao tác nền - chuyển đến máy chủ truy xuất một số dữ liệu trong khi phiên điện thoại đang diễn ra và sau đó thông báo cho người dùng.Ứng dụng nền iPhone để cập nhật màn hình khi nhận được cuộc gọi điện thoại

Sau khi tìm kiếm, tôi thấy rằng tôi có thể sử dụng Private Telephony Headers/Framework để thực sự biết ai đang gọi trong ứng dụng của tôi. Tuy nhiên, tôi không thể cập nhật màn hình trình quay số với thông tin được truy xuất từ ​​máy chủ. Ngoài ra tôi thấy rằng ứng dụng phải chạy khi cuộc gọi điện thoại đến. Yak !!

Tôi biết rằng điều này sẽ không được chấp thuận trong cửa hàng táo, tuy nhiên tôi đang tìm kiếm 2 thứ:

  1. Làm thế nào để đưa ứng dụng này ở chế độ nền.
  2. Làm cách nào để hiển thị một số thông tin trong khi cuộc gọi đang diễn ra. Thông báo địa phương là tốt nhưng nó phải hiển thị ngay lập tức.

Thậm chí nếu chúng tôi phải bẻ khóa, tôi muốn biết cách thực hiện việc này. Ứng dụng này là dành cho các quan chức thực thi pháp luật - bằng chứng về khái niệm.

+1

Nếu bạn muốn biến loại ứng dụng này thành một cách thích hợp, bạn sẽ cần phải bẻ khóa, bởi vì tôi nghĩ giải pháp tốt nhất sẽ là nền daemon làm việc nâng hạng nặng và sau đó mã tiêm vào SpringBoard để hiển thị thông tin. Không có hướng dẫn thực sự về cách làm những việc như vậy, tuy nhiên, các nhà phát triển đang ở trong cảnh jailbreak có kinh nghiệm về vấn đề này và đôi khi họ làm công việc tự do. – YllierDev

+0

Tôi về cơ bản tìm kiếm mã tiêm vào bảng mùa xuân để các thông tin nhạy cảm cho các quan chức thực thi pháp luật được hiển thị ngay lập tức và họ được thông tin tốt hơn trong khi cuộc gọi đang diễn ra. Nếu Apple nói rằng nó ngăn chặn những thay đổi như vậy đối với trải nghiệm người dùng hoặc bảo mật/bảo mật, tôi sẽ nói rằng họ đã không thiết kế nó tốt hơn và sợ hãi .. và chỉ ẩn đằng sau những lý do này. –

+0

Nếu bạn muốn tự mình thử, MobileSubstrate (http://iphonedevwiki.net/index.php/MobileSubstrate) là công cụ để sử dụng để tiêm mã trên các thiết bị đã bẻ khóa. Tôi hiểu Apple không sẵn sàng mở rộng hệ thống cho các nhà phát triển. "Tweaks" của các nhà phát triển thiếu kinh nghiệm có thể gây ra sự tàn phá nghiêm trọng và iPhone có nghĩa là một sản phẩm có khối lượng bảo trì thấp. Tuy nhiên, điều đó đã không ngăn cản tôi khỏi việc sửa đổi và cải thiện hệ thống;) – YllierDev

Trả lời

3

Như YllierDev đã nói, bạn có thể xem xét một tinh chỉnh MobileSubstrate để hiển thị thông tin. Nhưng, đối với cái gì đó là lẽ một chút ít khó khăn cho người mới, bạn có thể thử này:

  1. Đầu tiên, tạo một daemon ra mắt. Điều này có thể chạy trong nền và làm bất cứ điều gì bạn thích. Nó sẽ được bắt đầu khi điện thoại khởi động, vì vậy người dùng không cần phải chạy một số ứng dụng đầu tiên, sau đó đặt nó vào nền. Tôi đã tìm thấy this to be a good example of building a LaunchDaemon

  2. Có vẻ như bạn đã biết cách sử dụng các tính năng không có giấy tờ của khung Core Telephony để nhận thông báo về cuộc gọi mới. Đây sẽ là trách nhiệm của daemon của bạn. Để có đầy đủ, see this answer hoặc this other answer về cách trình nền có thể nghe cuộc gọi với thông báo Darwin.

  3. Khi cuộc gọi bị chặn, daemon của bạn có thể liên hệ với máy chủ của bạn.

  4. Sau đó, bạn có thể tạo một popup đơn giản với something like this:

CFOptionFlags responseFlags = 0; 
CFUserNotificationDisplayAlert(20.0, 3, NULL, NULL, NULL, 
    CFSTR("Hello"), CFSTR("Hello World"), CFSTR("OK"), 
    NULL, NULL, &responseFlags); 

Dưới đây là một số Apple docs on CFUserNotifications

Bạn có thể sẽ phải liên kết với khuôn khổ CoreFoundation, và có lẽ include this header trong dự án của bạn, cho CFUserNotificationDisplayAlert() để có sẵn.

Nhưng, điều đó sẽ cung cấp cho bạn cửa sổ bật lên cùng với dữ liệu cuộc gọi động của bạn.