2014-01-21 2 views
3

Мы начинаем с Android. Мы хотим программно отправлять файлы, когда доступен интернет (по электронной почте). Мы предполагаем, что лучший способ программирования - отправить файлы в очередь, если нет интернета. Когда интернет обнаружен, файлы будут загружаться по очереди. Мы предполагаем, код должен быть как следующее:Как хранить и отправлять файлы в очереди, когда доступен интернет

Фоновый служба постоянно проверяет, есть интернет:

public class EducarCabezoService extends Service{ 
    @Override 
    public void onCreate() { 
     super.onCreate();     
     IntentFilter filter = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);   
     ciReceiver = new checkInternetReceiver(); 
     registerReceiver(ciReceiver, filter);   

Фоновая служба использует BroadcastReceiver для этой цели:

public class checkInternetReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) {  
     Intent uqofIntent = new Intent(context, UploadQueueOfFilesService.class); 
     context.startService(uqofIntent); 

Мы Бесполезный Найти как положить файлы в очередь (может быть, это не обычная процедура). Мы можем использовать метод isOnline() из here:

public class MainActivity extends Activity { 
    public uploadFile(){ 
     if (!isOnline()){ 
      // TODO Send files to queue? 

Мы не знаем ни , как загрузить эти файлы из этой очереди:

public class UploadQueueOfFilesService extends Service{ 
    @Override 
    public void onCreate() { 
     // TODO Start uploading files 
+1

Это звучит неплохо для использования [Квадратная лента] (http://square.github.io/tape/). – CommonsWare

+0

Сохраните файлы на хранение. Например, папка «out». Если там есть файлы, загрузите. Вот опция для внутреннего и внешнего хранилища: http://developer.android.com/guide/topics/data/data-storage.html#filesInternal – MikeHelland

+0

Вы должны отслеживать [CONNECTIVITY_ACTION] (http://developer.android.com). /reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION) вместо SCAN_RESULTS_AVAILABLE_ACTION. См. [Эта статья] (http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html#MonitorChanges) о мониторинге состояния подключения. –

ответ

-1

Это сэкономит файл (для «внутренней памяти» вы можете также использовать внешнее запоминающее устройство (если их устройство имеет его)):

String FILENAME = "out/file1"; 
String string = "hello world!"; 

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
fos.write(string.getBytes()); 
fos.close(); 

Когда вы идете в Интернете, просто искать файлы в каталоге из , Загружайте и удаляйте их по одному.

EDIT: В противном случае, если файлы уже находятся в хранилище, и вы не хотите их копировать или удалять, используйте таблицу SQLite для хранения строки для каждого файла, который должна загрузить ваша служба, а затем удалите строка из таблицы.