通过保存内部存储来共享可绘制图像

时间:2014-12-19 23:51:46

标签: android external sharing internal saving-data

我的应用程序中有大约10张图像,它们处于可绘制的版本中,而不是从服务器下载。

我需要分享这些图片。

我有这样的解决方案:将drawable转换为文件,保存并从文件夹共享文件。

当我拿到SD卡时,外部存储是否正常。但是当我使用Nexus 5时,例如(内部存储)它会保存一些文件,但由于格式不正常而无法共享它。

请帮助我内部存储或与drawable共享。

private void shareit()
    {

        Bitmap icon = BitmapFactory.decodeResource(getResources(), R.drawable.son); 

        Intent share = new Intent(Intent.ACTION_SEND);
        share.setType("image/jpeg");
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        icon.compress(Bitmap.CompressFormat.JPEG, 100, bytes);

        File f;             

        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {
            // We can read and write the media
            f=new File(Environment.getExternalStorageDirectory() + File.separator + "son.jpg");
        }
        else{
            f = new File(getActivity().getApplicationContext().getCacheDir(), "son.jpg");
            if(f.exists()){
                Log.i("imageExistsInternal", "file is complete");
            }
        }
        if(!f.exists())
            f.mkdir();
        share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f));
        startActivity(Intent.createChooser(share, "Share Image"));
    }

1 个答案:

答案 0 :(得分:0)

在上面的代码中,您没有将图像写入文件。如果图像不存在,将创建一个目录,因此格式错误。

  if(!f.exists())
      f.mkdir();

你需要像这样改变

if (!f.exists()) {
        FileOutputStream outputStream = null;
        try {
            outputStream = new FileOutputStream(f);
            outputStream.write(bytes.toByteArray());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (outputStream != null) {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }