Android图片发送意图

时间:2011-07-11 08:40:23

标签: android android-intent

我正在尝试从我的应用程序中的drawables共享图像。我一直在java.io.FileNotFoundException:/abc.jpg (read-only file system)

我的代码是

  private String SaveCache(int resID) {
            String path = "";  
            try {
                InputStream is = getResources().openRawResource(resID);
                File cacheDir = this.getExternalCacheDir();
                File downloadingMediaFile = new File(cacheDir, "abc.jpg");
                byte[] buf = new byte[256];
                FileOutputStream out = new FileOutputStream(downloadingMediaFile);   
                while (true) {
                    int rd = is.read(buf, 0, 256);
                    if (rd == -1 || rd == 0)
                        break;
                    out.write(buf, 0, rd);              
                }
                is.close();
                out.close();
                return downloadingMediaFile.getPath();
            } catch (Exception ex) {
                Toast.makeText(this, ex.toString(), Toast.LENGTH_LONG).show();
                ex.printStackTrace();
            }
            return path;
        }



        private void ImageShare() {
            String path = SaveCache(R.drawable.testsend);
            Toast.makeText(this, path, Toast.LENGTH_LONG).show();
            Intent share = new Intent(android.content.Intent.ACTION_SEND);
            share.setType("image/jpeg");
            share.putExtra(Intent.EXTRA_SUBJECT, "test");
            share.putExtra(Intent.EXTRA_TEXT, "test");
            share.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + path));       
            try {
                startActivity(Intent.createChooser(share, "Choose share method."));
            } catch (Exception ex) {
                ex.printStackTrace();
            }

        }

如果需要更多信息,我们将很乐意提供任何帮助。

2 个答案:

答案 0 :(得分:2)

确保已安装外部存储设备。

来自getExternalCacheDir()的文档:

  

返回保存应用程序缓存文件的目录的路径   外部存储。如果当前不是外部存储,则返回null   因此无法确保路径存在;你需要打电话   这个方法可用时再次使用。

答案 1 :(得分:0)

http://www.anddev.org/post3469.html#p3469

您需要使用

FileOutputStream fos = openFileOutput(name,MODE);

如示例中所述。