天天看點

錄像過程中系統時間改變了,怎麼避免帶來的悲劇

錄像過程中系統時間改變了,怎麼避免帶來的悲劇

       在android系統上,我們知道改變系統時間的方法有兩種,一種就是通過再設定應用裡面設定日期時間,另外一種就是通過網絡背景同步時間,在手機平闆上這兩種是比較多的,當然作為車載裝置,一般還會增加用GPS時間來同步系統時間。系統時間改變有這麼幾種方式,但是在錄像過程中系統時間改變了,會有什麼危害呢?

       通過筆者的實驗,如果開始錄像是2014年5月20日10點整開始,過了一分鐘,加入通過網絡已經同步修改了系統時間到2014年7月1日,那麼即使這個錄像檔案實際上隻錄了5分鐘,我們回放這個檔案的時候顯示的錄像檔案總時間會有比較大的異常。

/*****************************************************************************************************/

聲明:本博内容均由http://blog.csdn.net/edsam49原創,轉載請注明出處,謝謝!

       因為在錄像檔案編碼的時候,大多在結束的時候還是會寫入一個結束的時間點,這個時間點采用的是系統時間,而不是開始錄像的系統時間加上錄像持續的時長。這樣可想而知會出問題。那怎麼避免呢?

      筆者在實際工作中是在行車記錄儀上使用的,系統時間改變都是通過SystemClock.setCurrentTimeMillis(millis);修改下去的,是以我們可以在調用這個接口的前後去做一點手腳。當然,直接放到SystemClock.java裡面是不行的,因為它隻是一個lib的通用接口,沒有對象在裡面。

      通過設定應用去修改時間,最終會走到AlarmManagerService.java裡的public voidsetTime(long millis)接口裡。筆者就在調用前後寫了資料庫一個存儲資料,在行車記錄裡面監聽這個資料的修改,這樣就可以在修改時間前,把錄像停下來,接到系統時間修改完成後,再啟動新的錄像。

      還有NetworkTimeUpdateService.java裡面修改系統時間的地方也類似處理一下。  

在錄像應用裡監聽這個資料庫值的狀态,然後在這個content observer裡面去會收到值改變的通知,收到這個通知就可以去停止目前的錄像,再等這個資料庫中的值改變,也就是系統時間設定完成後會設定的這個值,在監聽接口裡面再去重新啟動錄像。

     事實證明,這樣的處理是簡單有效的。