Я делаю приложение для Android для передачи файлов с устройства в приложение Java на компьютере. Он работает в том смысле, что может отправлять файлы на компьютер, но при отправке имеет ProgressDialog
. Это диалоговое окно не предназначено для наблюдения за ходом чтения с SD-карты, а вместо этого за ходом загрузки на сервер. Пока что мои поиски привели только к чтению с SD-карты или веб-страницы.
Для загрузки я использую простой OutputStream
, созданный с помощью socket.getOutputStream();
. Мой код выглядит следующим образом:
protected void onProgressUpdate(Integer... values) {
mProgressDialog.setIndeterminate(false);
mProgressDialog.setProgress(progress);
}
@Override
protected String doInBackground(String[] params) {
String IP = params[1];
File myFile = new File(params[0]);
int count;
try {
long total = 0;
Socket socket = new Socket(IP, 25000);
byte[] buffer = new byte[(int) myFile.length()];
FileInputStream fis = new FileInputStream(myFile);
BufferedInputStream in = new BufferedInputStream(fis);
OutputStream out = socket.getOutputStream(); // THIS IS MY OUTPUTSTREAM
while((count = in.read(buffer, 0, buffer.length)) != -1) {
total += count;
progress = (int) (count);
publishProgress();
out.write(buffer, 0, buffer.length);
Log.i("TOTAL", Long.toString(total));
Log.i("Upload progress", "" + (int) ((total * 100) / buffer.length));
}
out.flush();
out.close();
in.close();
socket.close();
} catch(Exception ex) {
ex.printStackTrace();
Log.i("TAG", "Failed to send file");
}
return "test";
}
Из моих исследований документации и других форумов кажется, что OutputStream не имеет методов, которые что-либо возвращают. Это проблематично, так как мне нужно вернуть его текущий статус при загрузке.
На данный момент диалоговое окно прогресса мгновенно переходит от 0 к максимальному, независимо от размера файла (на самом деле это занимает гораздо больше времени). Я не знаю, что может быть причиной этого, но это не главное.
Как я могу отслеживать ход загрузки файла с помощью OutputStream? Возможно ли это сделать?
Заранее спасибо.