2013-08-19 43 views
8

Tôi đang cố gắng đồng bộ hóa dấu thời gian giữa nhiều thiết bị Android để tôi có thể khởi chạy tác vụ cùng một lúc. Tôi thấy rằng tôi có thể sử dụng Timer và đặt ngày dựa trên System.currentTimeMillis(), nhưng vấn đề dường như là dấu thời gian của nhiều thiết bị chỉ đủ xa nhau mà tôi không nhận được độ chính xác mà tôi muốn.Đồng bộ hóa dấu thời gian trên nhiều thiết bị

Tôi đang tìm ở đâu đó trong khoảng 50-100 ms, nếu có thể. Một ý tưởng tôi có là sử dụng Android Beam để gửi dấu thời gian của thiết bị đến thiết bị khác và sau đó tính toán delta, nhưng hóa ra tôi phải lấy dấu thời gian trước khi thư thực sự được gửi và nhận (tức là người dùng càng dài chờ đợi để gửi, đồng bằng lớn hơn sẽ được), mà làm cho chương trình đó hoàn toàn sụp đổ.

Làm cách nào để đồng bộ hóa hai hoặc nhiều thiết bị để đồng hồ bên trong của chúng không cách nhau hơn 100 ms? Điều này thậm chí có thể được nếu không sử dụng một máy chủ bên ngoài giữ thời gian không?

Bất kỳ đề xuất nào khác về kỹ thuật để thực hiện điều gì đó trên nhiều thiết bị càng gần với càng nhiều càng tốt cũng sẽ được hoan nghênh.

Trả lời

4

Tại sao không sử dụng thời gian GPS? Các thẻ thời gian từ GPS khá chính xác.

Bạn có thể đồng ý trên tất cả các thiết bị vào một thời điểm nhất định và sau đó khởi động thiết bị khi GPS báo cho bạn biết.

+1

Tôi đã thử sử dụng vị trí GPS. Tôi có thể nhận được nó và thiết lập các đồng bằng, và trong khi tôi đã không nhận được đồng bộ hóa được nêu ra, tôi không biết nếu điều này là có được khả thi. Trong thử nghiệm thực tế của tôi, tôi đã phải chờ đợi đôi khi trở lên của một phút cho một tín hiệu GPS. Chưa kể, đây sẽ là một quyền được yêu cầu nhiều hơn cho ứng dụng. Tôi sẽ tiếp tục sử dụng phương pháp thời gian GPS ngay bây giờ và xem liệu tôi có thể xây dựng một sơ đồ đồng bộ hóa hoạt động hay không, nhưng tôi không biết liệu việc sử dụng GPS có đáng tin cậy trong thời gian dài hay không. –

0

Tôi đang gặp khó khăn với cùng một vấn đề ngay bây giờ. Tôi đã thử gps thời gian, nhưng tôi không thể đảm bảo rằng người dùng sẽ có tín hiệu gps trong nhà.

Giải pháp của tôi là để có tất cả các thiết bị lấy thời gian từ một máy chủ NIST và sau đó chỉ cần thêm hoặc bớt sự chênh lệch thời gian với System.currentTimeMillis()

Nếu thiết bị này được bắt nguồn từ bạn có thể thử để đồng bộ hóa đồng hồ.

https://play.google.com/store/apps/details?id=ru.org.amip.ClockSync&hl=en

2

Về cơ bản, bạn có hai lựa chọn: cách đơn giản hoặc khó.

Cách đơn giản là sử dụng một nguồn bên ngoài duy nhất cho các tín hiệu thời gian, chẳng hạn như NIST, một nguồn internet khác hoặc GPS như @Stefan đề xuất. Các nguồn Internet sử dụng NTP, xem câu hỏi Java NTP client này.

Cách khó là làm Clock synchronization giữa các thiết bị.

0

Phần cứng GPS Android thường chỉ có độ chính xác vài giây. Ba số dấu thời gian cuối cùng của số phao giây mili giây là 000.

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