如何才能第二次正确保存我的位图?

时间:2016-06-05 11:36:24

标签: android android-layout android-imageview android-bitmap android-file

我想将我的位图保存到缓存目录。 我使用这段代码:

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

我该如何解决?

提前感谢。

2 个答案:

答案 0 :(得分: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);
        }

答案 1 :(得分:0)

这只是一个猜测,但是由于您保存了一个新图像(使用旧名称或其他名称,这是不相关的),您应该将媒体扫描发送到该路径,以便使用新内容更新媒体提供者。 / p>

请参阅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.
    }
});

无论如何,在保存新文件后,应将其称为。正如我所说,我没有测试,这只是一个随机的猜测。