图片在通过Google环聊发送后被删除

时间:2014-02-12 02:48:29

标签: android attachment mms hangout

我写了一个简单的应用程序来查看图片。但是,在发送具有共同意图的图片之后:

        Intent shareIntent = new Intent();
        shareIntent.setAction(Intent.ACTION_SEND);
        shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("URLSTRING"));
        shareIntent.setType("image/jpeg");
        mActivity.startActivity(Intent.createChooser(shareIntent, "SHARE"));

如果我选择Google环聊,可以成功发送图片。但在那之后它被删除了!

使用其他文件管理器应用程序(root explorer)进行测试,这是相同的行为!

但是,使用GooglePlusGallery应用程序发送图片似乎没有这个问题。

诀窍是什么?如何避免图片被删除?

3 个答案:

答案 0 :(得分:0)

我遇到与环聊相同的问题。它似乎删除了文件,即使它没有成功发送它,因此总是在调用intent之前将文件复制到新的临时文件。

答案 1 :(得分:0)

我有同样的问题,我相信会暴露一个内容提供者而不是uri可以解决。

答案 2 :(得分:0)

这里的问题相同。我的应用甚至没有存储写入权限,所以我假设环聊实际上是删除图像。

因此,我不是直接共享文件,而是首先制作副本。 这是完整的解决方案:

Bitmap bm = BitmapFactory.decodeFile(filePath); // original image
File myImageToShare = saveToSD(bm); // this will make and return a copy
if (myImageToShare != null) {
    Intent shareIntent = new Intent();
    shareIntent.setAction(Intent.ACTION_SEND);
    shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(myImageToShare));
    shareIntent.setType("image/jpeg");
    context.startActivity(Intent.createChooser(shareIntent, "Share using"));
}

private File saveToSD(Bitmap outputImage){
    File storagePath = new File(Environment.getExternalStorageDirectory() + yourTempSharePath);
    storagePath.mkdirs();

    File myImage = new File(storagePath, "shared.jpg");
    if(!myImage.exists()){
        try {
            myImage.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    } else {
        myImage.delete();
        try {
            myImage.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    try {
        FileOutputStream out = new FileOutputStream(myImage);
        outputImage.compress(Bitmap.CompressFormat.JPEG, 100, out);
        out.flush();
        out.close();
        return myImage;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}