6

Desidero salvare la mia bitmap nella directory cache. Io uso questo codice:Come posso salvare la mia bitmap correttamente per la seconda volta?

try { 
     File file_d = new File(dir+"screenshot.jpg"); 
     @SuppressWarnings("unused") 
     boolean deleted = file_d.delete(); 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 

    imagePath = new File(dir+"screenshot.jpg"); 
    FileOutputStream fos; 
    try { 
     fos = new FileOutputStream(imagePath); 
     bitmap.compress(CompressFormat.JPEG, 100, fos); 
     fos.flush(); 
     fos.close(); 
    } catch (FileNotFoundException e) { 
     Log.e("GREC", e.getMessage(), e); 
    } catch (IOException e) { 
     Log.e("GREC", e.getMessage(), e); 
    } 
} 

it s lavorando bene. Ma se voglio salvare diversi img nello stesso percorso, qualcosa va storto. Voglio dire che è salvato sullo stesso percorso ma lo vedo vecchio, ma quando clicco sull'immagine posso vedere l'immagine corretta che ho salvato la seconda volta.

Forse è venuto dalla cache ma non voglio vedere la vecchia immagine perché quando voglio condividere quell'immagine con whatsapp vecchia immagine vista, se invio l'immagine sembra corretta.

voglio condividere un'immagine salvata su WhatsApp come questo codice:

Intent shareIntent = new Intent(); 
shareIntent.setAction(Intent.ACTION_SEND); 
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(imagePath)); 
shareIntent.setType("image/jpeg"); 
startActivityForResult(Intent.createChooser(shareIntent, getResources().getText(R.string.title_share)),whtsapp_result); 

Come posso risolvere il problema?

grazie in anticipo.

+0

migliore pratica è quando si salva una nuova immagine prima cancellare l'immagine precedente (stesso nome immagine) dalla directory. –

+0

Elimina l'immagine prev come puoi vedere nel mio codice, non funziona? –

+0

controlla il valore 'cancellato'. Se l'immagine viene cancellata, non tornerà mai più. –

risposta

3

Finalmente ho risolto il problema in questo modo:

Intent shareIntent = new Intent(); 
shareIntent.setAction(Intent.ACTION_SEND); 
shareIntent.putExtra(Intent.EXTRA_STREAM, getImageUri(context,bitmap_)); 
shareIntent.setType("image/jpeg"); 
startActivityForResult(Intent.createChooser(shareIntent, getResources().getText(R.string.title_share)),whtsapp_result); 

v

public Uri getImageUri(Context inContext, Bitmap inImage) { 
      ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
      inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
      String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "TitleC1", null); 
      return Uri.parse(path); 
     } 
0

Questa è solo un'ipotesi, ma poiché si salva una nuova immagine (con il vecchio nome, o un'altra, non pertinente) si dovrebbe attivare una scansione dei supporti su quel percorso in modo che il fornitore di contenuti multimediali venga aggiornato con nuovi contenuti.

Vedi here:

MediaScannerConnection.scanFile(context, new String[]{imagePath}, null, null); 

O, meglio ancora, attendere che la scansione da completare:

MediaScannerConnection.scanFile(context, new String[]{imagePath}, null, new OnScanCompletedListener() { 
    @Override 
    void onScanCompleted(String path, Uri uri) { 
     // Send your intent now. 
    } 
}); 

In ogni caso questo dovrebbe essere chiamato dopo il nuovo file viene salvato. Come ho detto, non ho provato e questa è solo un'ipotesi casuale.

+0

non funziona, :( –

+0

Scusami per quello :-) – natario

+0

come posso eliminare la miniatura –