【发布时间】:2017-05-09 03:55:14
【问题描述】:
我正在开发一个应用程序,在该应用程序中我创建了一些通过我的应用程序访问的目录我想隐藏该目录以确保安全。这样用户只能在应用程序内访问它们,而不能在应用程序之外访问它们应用程序就像通过文件管理器一样。 任何帮助表示赞赏。 不要重复,因为我搜索了所有答案,但没有人为我工作。
【问题讨论】:
我正在开发一个应用程序,在该应用程序中我创建了一些通过我的应用程序访问的目录我想隐藏该目录以确保安全。这样用户只能在应用程序内访问它们,而不能在应用程序之外访问它们应用程序就像通过文件管理器一样。 任何帮助表示赞赏。 不要重复,因为我搜索了所有答案,但没有人为我工作。
【问题讨论】:
只是在文件夹名称前添加一个点不会保护它。它仅对用户不可见。它仍然可以从应用程序访问,包括文件管理器和用户。默认情况下,它只是被大多数文件管理器隐藏。
出于安全考虑,您要隐藏文件,因此应使用 Android 的内部存储。
来自官方 Android 开发者指南:
您可以将文件直接保存在设备的内部存储中。默认情况下,保存到内部存储的文件对您的应用程序是私有的,其他应用程序无法访问它们(用户也不能)。当用户卸载您的应用程序时,这些文件将被删除。
例子:
String FILENAME = "hello_file";
String string = "hello world!";
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
您还可以加密您的文件并将加密密钥存储在 android Keystore 中。
Here 是关于 android 中文件加密的一个很好的答案。
Official guide 关于 Android Keystore。
【讨论】:
Context.MODE_PRIVATE 将它们存储在内部存储中,用户应该无法看到该文件,因为我认为他无法打开存储它的目录。
明确“您要创建其他应用程序无法访问的目录或文件夹”(这是您的应用程序文件夹)或在任何位置创建文件夹,但它对您隐藏
对于第一个解决方案是 -
public static File saveFileInAppDirectory(Context context,byte[] inpute, String directoryName,String fileName){
File mypath;
File directory = new File(context.getExternalFilesDir(
Environment.DIRECTORY_PICTURES), directoryName);
if (!directory.mkdirs()) {
directory.mkdir();
}
mypath = new File(directory, fileName);
try {
InputStream is = new ByteArrayInputStream(inpute);
FileOutputStream f = new FileOutputStream(mypath);
byte[] buffer = new byte[1024];
int len1 = 0;
while ((len1 = is.read(buffer)) > 0) {
f.write(buffer, 0, len1);
}
f.close();
} catch (Exception e) {
Log.e("SAVE_IMAGE", e.getMessage(), e);
e.printStackTrace();
}
return mypath;
}
它将创建您的应用文件夹路径的目录 - Android/Data/Data/Your.Package.Name/FolderName/FileName
第二个解决方案 - 只需更改文件名
File mypath = new File(directory, "."+fileName);
如果你想同时实现这两者,而不仅仅是替换
new File(directory, fileName); with new File(directory, "."+fileName);
【讨论】:
只需写目录名,后跟一个点(。) 示例:
.myDir or .myDir1
因此这些目录将不会通过文件管理器可见。在访问这些目录时,仅使用 dot(.) 调用它们 示例:
"/path/to/folder/.myDir/"
文件名也可以这样
【讨论】:
用于Android中的隐藏文件夹
您的文件夹名称是MyApplicationFolder,然后您需要在文件夹名称前添加(.)点,如。我的应用程序文件夹。
所以当文件夹被创建时,文件夹是隐藏模式的图像、视频等,但它会在 FileManager 中可见。
【讨论】: