我正在尝试将图像保存在app文件目录中的目录中。通过公开,我的意思是我将能够使用动作视图意图。
/** 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 :(得分:7)
您将要使用Environment.getExternalStoragePublicDirectory (String type)
或Environment.getExternalStorageDirectory
作为文件目录的根目录。有关详细信息,请参阅documentation。
编辑:
来自getExternalStorageDirectory ()
下的环境文档:
注意:不要在这里混淆“外部”这个词。这个目录 可以更好地被视为媒体/共享存储。它是一个文件系统 可以容纳相对大量的数据,并且可以共享 所有应用程序(不强制执行权限)。传统上这是 SD卡,但它也可以作为内置存储器实现 与受保护的内部存储区别的设备,可以是 作为文件系统安装在计算机上。
所有“外部”意味着它在您的应用程序或公共外部。因此,如果SD卡可用,则此方法默认为该存储目录。如果设备不使用SD卡,则使用设备的内置存储。
答案 1 :(得分:1)
我认为在我的情况下最安全的做法是使用Environment.getExternalStoragePublicDirectory (String type)
如果发现异常,我将使用普通的getFilesDir将其保存到内部存储。我还没有找到一种方法让公开的应用程序数据中的文件夹可用。
这是因为如果设备应该有SD卡但未安装,则getExternalStoragePublicDirectory可能会失败。所以你不能依赖它。