6

Я хочу сохранить растровое изображение в кеш-каталог. Я использую этот код:Как я могу сохранить растровое изображение правильно во второй раз?

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); 
    } 
} 

он с работает нормально. Но если я хочу сохранить разные img на один и тот же путь, что-то пойдет не так. Я имею в виду, что он сохраняется на том же пути, но я вижу это старое изображение, но когда я нажимаю на изображение, я могу видеть правильное изображение, которое я сохранил во второй раз.

Возможно, он исходит из кеша, но я не хочу видеть старое изображение, потому что, когда я хочу поделиться этим изображением с увиденным старым изображением whatsapp, если я отправлю изображение, оно кажется правильным.

Я хочу поделиться сохраненное изображение на WhatsApp, как этот код:

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); 

Как я могу это исправить?

благодарит заранее.

+0

Лучшая практика при сохранении нового изображения сначала очистить предыдущее изображение (такое же имя изображения) из каталога. –

+0

Я удаляю предыдущее изображение, как вы можете видеть в моем коде, он не работает? –

+0

проверьте значение 'deleted'. Если изображение удалено, оно никогда не вернется. –

ответ

3

Наконец я решил мою проблему так:

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

Это всего лишь предположение, но поскольку вы сохраняете новое изображение (со старым именем или другим, это не имеет значения), вы должны запустить сканирование носителей на этот путь, чтобы медиа-провайдер обновлялся новым контентом.

См here:

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

Или еще лучше, ждать сканирование будет завершено:

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

В любом случае это должно быть названо после новый файл будет сохранен. Как я уже сказал, я не тестировал, и это просто случайное предположение.

+0

, он не работает, :( –

+0

Извините, что :-) – natario

+0

как я могу удалить миниатюру –