2013-04-08 55 views
1

我的應用程序動態創建幾個文件並通過一個對象跟蹤文件。在某個時候,該對象被傳遞給一個IntentService。該IntentService的目的是Android:如何保證文件上傳到WCF服務?

  • 創建一個XML文件包含數據有關的其他文件
  • 的XML文件和其他文件添加到一個ZIP文件
  • 上傳的ZIP文件到WCF服務

ZIP文件必須在某個點上傳。事情可能發生; WCF服務可能關閉等等。

我在保證ZIP文件上傳方面有哪些選擇?我目前的計劃是將一些信息保存到SQLite數據庫,並在每次啓動應用程序時檢查它並從中取出。不知道這是一個好主意,或者有更好的方法來處理這個問題。另外,我是一個Android新手,但是如果我已經正確理解了事情,如果IntentService在完成之前關閉,它將自動使用相同的Intent重新創建,並且在某些時候,對吧?否則我將不得不考慮這一點。

回答

2

你應該看看使用通過利用同步適配器 的內置的同步服務看一看這個 http://naked-code.blogspot.co.uk/2011/05/revenge-of-syncadapter-synchronizing.html

觀看嵌入到該頁面的Google I/O視頻。

您應該注意,Virgil建議使用除同步適配器以外的其他任何東西都是錯誤的。 SyncAdapters實現起來很簡單,上面的鏈接也演示瞭如何設置一個。

SyncAdapter將負責重試嘗試,並會選擇最佳時刻來同步手機中的數據。您可以安排同步適配器,或者您可以請求即時同步,無論您的需要如何。

姓名和密碼不由帳戶經理保存。他們會;被您的網站或oauth2服務所需要,但帳戶經理會存儲令牌而不是信用卡。如果令牌需要刷新,那麼用戶將顯示帳戶管理器登錄屏幕,然後運行您的代碼以獲取新的身份驗證令牌。

更多細節

+0

SyncAdapter似乎是一個非常漂亮的選項。不幸的是,我不能讓用戶保存任何類型的用戶名/密碼,並且需要用戶名/密碼才能上傳文件。我想這使用SyncAdapter排除? – user1323245 2013-05-02 14:37:44

+0

@ user1323245我已更新我的回答 – jamesc 2013-05-03 21:30:44

+0

非常感謝您的幫助。 – user1323245 2013-05-04 09:26:10

0

我目前的計劃是保存一些信息到SQLite數據庫,並檢查它每次啓動應用程序,並從那裏。

你快到了。每次應用程序啓動時,請使用AlarmManager並每隔X小時/天檢查上傳狀態,而不是每次應用程序啓動時檢查數據庫。上傳可以由IntentService發起。

AlarmManager更好的原因是用戶可能會選擇將應用程序保持打開幾天或幾周!通過運行數據庫和上傳代碼的重複警報,您可以確定上傳嘗試將定期發生。

看看上調度重複任務此相關的問題 - Scheduling recurring task in Android

+0

http://developer.android.com/training/id-auth/identify.html它自己使用的警報管理器會工作,但它是錯誤的做法把手機很可能是忙於其他網絡流量。將SyncAdapter與警報管理器結合使用可能是更好的解決方案,但SyncAdapter無論如何都有內置的日程安排選項,因此它不是必需的。 – jamesc 2013-04-08 15:02:34

+0

我不會說錯。關閉「全局同步」將確保從不調用同步適配器。我同意,將適配器與[管理應用使用的網絡數據](http://developer.android.com/training/basics/network-ops/managing.html)結合使用是一個更好的解決方案,只要同步是打開。 – 2013-04-08 15:44:53

+0

我完全不同意。你應該尊重你的用戶的意願。如果您的應用不尊重全局同步設置,那麼確實是錯誤的。如果我關閉了同步設置,那麼這意味着我不想要任何網絡流量,也許是因爲我正在使用漫遊協議,網絡流量將花費大量金錢,或者需要預留一些其他許多原因信用付費和沒有WiFi可用。對不起,但不使用同步適配器顯然是錯誤的。 – jamesc 2013-04-08 15:58:09