O tamanho do arquivo é 0 ao recriar o arquivo do URI ou o caminho do arquivo original [getExternalFilesDir (tipo de seqüência de caracteres) vs getFilesDir ()]

Um pouco do primeiro plano de fundo: esse aplicativo tira uma foto e faz o upload para um armazenamento de blobs do Azure.

A imagem é armazenada em um arquivo (armazenamento interno) usandogetApplicationContext().getFilesDir();

Para fazer upload, preciso chamar a função uploadFromFile (..) da seguinte forma:CloudBlockBlob.uploadFromFile(String path);

A função uploadFromFile do SDK do Azure tem a seguinte aparência:

public void uploadFromFile(final String path) throws StorageException, IOException {
        uploadFromFile(path, null /* accessCondition */, null /* options */, null /* opContext */);
    }

public void uploadFromFile(final String path, final AccessCondition accessCondition, BlobRequestOptions options,
            OperationContext opContext) throws StorageException, IOException {
        File file = new File(path);
        long fileLength = file.length();
        InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
        this.upload(inputStream, fileLength, accessCondition, options, opContext);
        inputStream.close();
    }

O problema está em jogolong fileLength = file.length(); onde o fileLength é 0.

Eu testei isso contra o usoEnvironment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); para o diretório de armazenamento. Isso funciona.

Preciso usar o armazenamento interno vs o armazenamento externo, pois isso é especificamente necessário para este projeto.

EDIT: O AndroidArquivo A documentação não menciona nada sobre esse comportamento. Suponho que isso possa ter algo a ver com o uso do armazenamento interno do aplicativo.

EDIT: Adicionando algum código

Estou enviando umArquivo mPhotoFile para a intenção da minha câmera. Isso conterá a foto. mPhotoFileUri contém o URI para este arquivo. A seguir está o código para usar o caminho do arquivo.

File file = new File(mPhotoFile.getPath()); // value -> /data/user/0/com.example.devpactapp/files/JPEG_20160209_234929_1936823724.jpg
boolean fileExists = file.exists();         // true
long fileLength = file.length();            // length 0

A seguir, está o código para obter o arquivo do URI.

File file = new File(mPhotoFileUri.getPath());  // value -> /data/user/0/com.example.devpactapp/files/JPEG_20160209_235534_-1059496729.jpg
boolean fileExists = file.exists();             // true
long fileLength = file.length();                // length 0

Eu tenho que passar o caminho desse arquivo para ouploadFromFile função.

Solução mencionada na minha 'resposta'.

questionAnswers(3)

yourAnswerToTheQuestion