我的应用程序会将一些文件写入应用程序在使用时将使用的存储空间(如配置)。此配置是时间相关的,将在需要时由应用程序替换。
目前,我正在使用 Environment.getExternalStorageDirectory() 将其写入 sdcard。但这在用户使用文件浏览器时可见并且可以被删除。
除了应用程序本身之外,我是否可以阻止文件删除?
我尝试使用 Environment.getDataDirectory() 但我没有在那里写的权限。还有其他方法吗?
我的应用程序会将一些文件写入应用程序在使用时将使用的存储空间(如配置)。此配置是时间相关的,将在需要时由应用程序替换。
目前,我正在使用 Environment.getExternalStorageDirectory() 将其写入 sdcard。但这在用户使用文件浏览器时可见并且可以被删除。
除了应用程序本身之外,我是否可以阻止文件删除?
我尝试使用 Environment.getDataDirectory() 但我没有在那里写的权限。还有其他方法吗?
是的。不要将文件保存在 SD 卡等公共位置,而是将文件写入应用程序私有空间(内部存储),例如:
FileOutputStream fos = openFileOutput("myfile.dat", Context.MODE_PRIVATE);
fos.write( WebnetTools.serializeObject( sec ) );
fos.close();
有关更多详细信息,请参阅文档。请注意,由于您到达那里的空间有限,它不等同于 SD 卡。
如果不需要写入 SD 卡,您可以写入手机的内部存储,以使数据对您的应用程序私有。
我在 android 清单中使用了 android:sharedUserId,现在可以跨应用程序的内部存储器进行写入。
由于我唯一的目的是编写文本文件(不涉及共享等),我发现这是最容易实现的。
试试这个 :
File folder = context.getDir("images", Context.MODE_WORLD_WRITEABLE);
File img = new File(folder, "img_"+widget_id+"_"+position+".png");
try{
FileOutputStream out = new FileOutputStream(img);
b.compress(Bitmap.CompressFormat.PNG, 100, out);
b.recycle();
internal_img = img.getPath();
}catch(Exception e){
e.printStackTrace();
}
getDir 在内部存储器上创建一个文件夹,您可以在里面写入所有您想要的内容,因为无法防止 SD 卡上的删除。此外,如果卸载 sd 卡,您将无法读取/写入文件