Existe alguma maneira de obter o progresso do upload corretamente com o HttpUrlConncetion?

Blog de desenvolvedores Android recomenda usarHttpURLConnection diferente do apacheHttpClient (http://android-developers.blogspot.com/2011/09/androids-http-clients.html). Eu aceito o conselho e obtenho problema ao relatar o progresso do upload do arquivo.

meu código para pegar progresso é assim:

try {
    out = conncetion.getOutputStream();
    in = new BufferedInputStream(fin);
    byte[] buffer = new byte[MAX_BUFFER_SIZE];
    int r;
    while ((r = in.read(buffer)) != -1) {
        out.write(buffer, 0, r);
        bytes += r;
        if (null != mListener) {
            long now = System.currentTimeMillis();
            if (now - lastTime >= mListener.getProgressInterval()) {
                lastTime = now;
                if (!mListener.onProgress(bytes, mSize)) {
                    break;
                }
            }
        }
    }
    out.flush();
} finally {
    closeSilently(in);
    closeSilently(out);
}

este código excede muito rápido para qualquer tamanho de arquivo, mas o arquivo ainda está fazendo upload para o utilitário do servidor e recebo resposta do servidor. parece queHttpURLConnection armazena em cache todos os dados no buffer interno quando eu chamoout.write().

Então, como posso obter o progresso real do upload de arquivos? Parece quehttpclient pode fazer isso, mashttpclient não é preferida ... alguma ideia?

questionAnswers(2)

yourAnswerToTheQuestion