2014-02-06 49 views
3

我试图将应用程序文件目录中的图像公开存储在目录中。通过公开,我的意思是我可以使用动作视图意图。android:公开存放目录中的内部存储文件

/** Saves the bitmap to app storage */ 
    public int SaveBitmap(Bitmap bitmap, String filename, Boolean scan){ 

     // Save the file 
     OutputStream os = null; 

     String path = context.getFilesDir() + "/MyAppName/"; 
     File file = new File(path); 
     if(!file.isDirectory())file.mkdirs(); 
     path += (filename + ".png"); 
     try { 
      os = new BufferedOutputStream(new FileOutputStream(path,true)); 
      //os = mContext.openFileOutput(, Context.MODE_PRIVATE); 
      bitmap.compress(CompressFormat.PNG, 100, os); 
      os.flush(); 
      os.close(); 
      bitmap.recycle(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return 1; //Failure 
     } 

     File fileR = new File(path); 

     fileR.setReadable(true, false); 
     // Show in Gallery 
     if(scan) ShowInGallery(filename); 

     return 0; // SUCCESS 

    } 

这段代码不会做的工作,这些文件私下模式仍在产生。

使用:

context.openFileOutput(filename + ".png", Context.MODE_WORLD_READABLE); 

我能够公开打开它们,但我不能将文件保存在一个目录。

请注意,我针对的用户没有SD卡,这就是为什么我没有使用外部存储。

我该怎么办?

+0

如果重要的是图像保持“私人”,除非采取行动,那么您将需要实施一个“ContentProvider”来让其他应用程序或意图临时访问您的数据。如果所有图像都可以访问,您可以简单地将它们存储在外部,如下面解释的答案。 – 323go

+0

阅读文档'context.getFilesDir' – njzk2

+0

@ njzk2 - 没有帮助,那是内部存储。 – katzenhut

回答

0

我认为在我的情况下最安全的做法是使用Environment.getExternalStoragePublicDirectory (String type) 如果发现异常,我将使用普通的getFilesDir将其保存到内部存储器中。我还没有找到一种方法来使应用程序数据中的文件夹公开可读。

这是因为getExternalStoragePublicDirectory可能会失败,如果设备应该有SD卡但未挂载。所以你不能依赖它。

+0

不好意思,但你为什么拒绝投票呢?它工作得很好,它做我需要做的事情。 – zed

6

您将要使用Environment.getExternalStoragePublicDirectory (String type)Environment.getExternalStorageDirectory作为文件目录的根目录。有关更多详细信息,请参见documentation

编辑:

从环境文档下getExternalStorageDirectory()

注意:不要用这个词混淆 “外部” 在这里。该目录 可以更好地被认为是媒体/共享存储。它是一个文件系统,它可以容纳相对较大数量的数据,并在所有应用程序间共享(不强制执行权限) 。传统上,这是SD卡的 ,但它也可以作为 设备中的内置存储设备实现,该设备与受保护的内部存储设备不同,并且可以将 作为文件系统安装在计算机上。

所有“外部”的含义是它在您的应用程序或公共外部。所以,如果SD卡可用,则此方法默认为该存储目录。如果设备不使用SD卡,则使用设备的内置存储器。

+1

我不想使用外部存储,这是因为我想要定位没有安装SD卡的用户。 – zed

+2

“外部”存储不仅仅意味着外部存储。请参阅编辑。 – Submersed

+1

“如果没有SD卡可用,则使用设备的内置存储。”不一定是真的 - 一个打算使用SD卡的设备,因为它实现了ExternalStorage **,当该卡被移除时,没有可用的外部存储**。被问到的问题是完全合法的,尽管*可能有*替代品,并且即使尝试访问位于应用程序目录中的文件,即使它们实际上具有对它们的访问权限,某些组件也可能不是。 –

相关问题