2013-12-18 29 views
0

我正在使用adb push將文件傳輸到Android設備。我能夠將文件推到SD卡,並命令行告訴我的傳輸速度,文件大小,時間流逝,例如:在Android應用程序中接收ADB狀態事件

C:\Users\some_guy\Pictures>adb -d push wilford.jpg /sdcard/wilford.jpg 
2558 KB/s (13104 bytes in 0.005s) 

我希望創建一個應用程序或服務,可預訂通過廣播接收器發送事件以獲取ADB推送何時開始,完成幷包括當前文件傳輸速率的更新。所以,當文件從adb寫入時,它會通知我的應用目前它的完成率和傳輸率。這可能嗎?需要什麼權限以及應用程序如何訂閱更新?我查看了權限和其他資源列表,無法找到實現此目的的方法。

另一種可能性是簡單地監視傳入的文件的SD卡文件系統,但我不知道是什麼會給我比監測,當新文件被完全寫入。

回答

1

我有一個非常類似的問題而回,我相信我用盡無濟於事所有選項。作爲adb push流程的一部分,沒有廣播。但是,您可以在每次推送前後使用adb shell am broadcast ...創建自己的廣播,甚至可以發送附加內容(例如文件名或傳輸速率)。

如果使用bash或python來編寫adb傳輸腳本,而不是windows批處理文件,這會更容易 - 我使用SDK工具中包含的MonkeyRunner的jython實現最終解決了這個問題,只能退出到shell做實際的文件推送,因爲MonkeyRunner沒有提供這個功能。

+0

雖然adb推送正在進行時,是否可以做廣播adb shell?我想提供%完成和傳輸速度的狀態,但不只是在推動結束時。 –

+0

我相信你可以並行運行多個adb會話。 –

1

可以檢測使用Linux內核的inotify目標目錄機制新文件至少創建。

的Android通過FileObserver類公開此功能:

監視器文件(使用inotify的)文件由任何處理的設備上訪問或改變由後觸發事件(包括本)。 FileObserver是一個抽象類;子類必須實現事件處理函數onEvent(int,String)。

每個FileObserver實例都監視單個文件或目錄。如果監視目錄,則會針對受監視目錄內的所有文件和子目錄觸發事件。

看到http://developer.android.com/reference/android/os/FileObserver.html

注意,該機制是不是在監視目錄顯示器僅在該目錄entires,而不是在其子目錄項遞推。這個question討論了一些遞歸的可能性。

+0

我不確定這是否在文件正在寫入時通知您。這是修改掩碼嗎?此外,它不會給你任何關於寫入量或寫入速度的任何信息。 –

+0

我並不十分確定底層文件系統如何處理正在進行的寫入操作,但有可能一旦看到創建的目錄,就可以嘗試定期監視文件大小。請記住,亞行不是面向最終用戶的工具。如果你真的想涉及一個應用程序,你可以通過adb轉發一個unix域或tcp套接字,通過它將數據發送到你的監控應用程序,並讓它寫入文件。 –

+0

使用文件瀏覽器應用程序,我可以看到該文件被寫入到SD卡中,傳輸完成,並且隨着時間的推移它會變大。我可能不得不人爲地通過輪詢文件大小(直到文件寫入完成)併除以已用時間來獲得傳輸速度。編輯:對不起,剛剛注意到你最近的評論。是的,也許一個套接字會更簡單,這將消除啓用調試priv的需要。正如你所說,它不適用於最終用戶。 –