2
I’m trying to generate a bitmap of a photo taken:
public void onClick(View v) {
final Runnable runnable = new Runnable() {
@Override
public void run() {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
// para usar fragment getActivity().getApplicationContext()
uriImagem = ProcessImages.getOutputMediaFileUri(ProcessImages.MEDIA_TYPE_IMAGE, ChecklistActivity.this);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriImagem);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
};
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.i("uriImagemNova", uriImagem.getPath());
if(requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
new CarregaMiniaturaAsyncTask().execute();
}
}
private class CarregaMiniaturaAsyncTask extends AsyncTask<Object, Object, Object> {
@Override
protected Object doInBackground(Object... params) {
// Cria um novo cursor para obter o caminho do arquivo da imagem e sua miniatura.
Cursor myCursor = null;
// As colunas que queremos retornar.
String[] projectionImage = {
MediaStore.Images.ImageColumns._ID,
MediaStore.Images.ImageColumns.DATA,
MediaStore.Images.ImageColumns.DATE_TAKEN,
MediaStore.Images.ImageColumns.DATE_ADDED,
MediaStore.Images.ImageColumns.ORIENTATION};
// Ira organizar a consulta por data em ordem decrescente.
String imageSort = MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC";
ContentResolver contentResolver = getContentResolver();
// Consulta as imagens armazenadas no sistema de arquivos.
myCursor = contentResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projectionImage, null, null, imageSort);
long imageId = 0l; // Armazena o id da imagem.
String imagePath = null; // Armazena o caminho para o arquivo da imagem.
long imageDataTaken = 0l; // Armazena a data em que a imagem foi capturada da camera.
long imageDataAdded = 0l; // Armazena a data em que a imagem foi adicionada ao MediaStore.
int imageOrientation = 0; // Armazena a orientacao da imagem.
// Obtem os dados da imagem
try {
myCursor.moveToFirst();
imageId = myCursor.getLong(myCursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns._ID));
imagePath = myCursor.getString(myCursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA));
imageDataTaken = myCursor.getLong(myCursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATE_TAKEN));
imageDataAdded = myCursor.getLong(myCursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATE_ADDED));
imageOrientation = myCursor.getInt(myCursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.ORIENTATION));
Log.d("PROCESSAMENTO DE IMAGENS", "Imagem id.: " + imageId);
Log.d("PROCESSAMENTO DE IMAGENS", "Imagem path.: " + imagePath);
Log.d("PROCESSAMENTO DE IMAGENS", "Imagem data taken.: " + imageDataTaken);
Log.d("PROCESSAMENTO DE IMAGENS", "Imagem data added.: " + imageDataAdded);
Log.d("PROCESSAMENTO DE IMAGENS", "Imagem Orientation.: " + imageOrientation);
// Obtem o URI da imagem em tamanho real para ser utilizado na visualizacao da imagem caso clique na miniatura.
//uriImagem = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, String.valueOf(imageId));
Log.d("PROCESSAMENTO DE IMAGENS", "Imagem uri.: " + uriImagem.getPath());
// Armazena o id da imagem para ser utilizado no recarregamento da imagem ao voltar da galeria do Android (Gallery App).
long imagemId = imageId;
List<Object> imagemCompactada = ProcessImages.compactarImagem(uriImagem.getPath());
imagemBitmap = (Bitmap) imagemCompactada.get(0);
byte[] imagemBytes = (byte[]) imagemCompactada.get(1);
encoded = Base64.encodeBytes(imagemBytes, Base64.DONT_BREAK_LINES | Base64.URL_SAFE);
} catch (IllegalArgumentException e) {
Log.e("PROCESSAMENTO DE IMAGENS", "A coluna nao existe", e);
} catch (IndexOutOfBoundsException e) {
Log.e("PROCESSAMENTO DE IMAGENS", "Voce tentou acessar uma localizacao menor que zero ou maior que o tamanho da lista.", e);
} finally {
myCursor.close();
}
return ProcessImages.getMiniaturaImagem(contentResolver, uriImagem.getPath(), imageId);
}
@Override
protected void onPostExecute(Object result) {
super.onPostExecute(result);
imagemBitmap = (Bitmap) result;
imageView1.setImageBitmap(imagemBitmap);
}
}
The bitmap is generated with the last photo from the public gallery, not with the photo that is taken from the camera and stored in the application folder.
Apparently, the cursor can only get data from the android public gallery. What I’m trying to do now, is to let the photos that are in the application folder, be visible/indexed in the public album, just like with Whatsapp. Someone knows the best way to do it?
Tell me exactly which line went wrong.
– Lucas Santos
Sorry for the delay, I put an image with the error in the question. I’m probably missing some argument on getMiniaturaImage, or I’m not sure how to call it, thank you!
– Morfina