您好,我正在尝试让用户无法访问从我的应用程序捕获的图像。首先,我尝试将这些图像保存到内部存储器,但没有用。然后我尝试使用“。”隐藏它们。文件夹名称前面。我不确定正确的方法是什么。我还尝试创建一个名为 .nomedia 的文件来绕过媒体扫描器。我对执行此操作的正确方法感到非常困惑。这是我的代码:
public String getImageUri(Context inContext, Bitmap inImage) {
/* *//* ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, ".title", null);
return Uri.parse(path);*//*
*/
File file = new File(Environment.getExternalStorageDirectory()
+ File.separator + "/.myFolder");
file.mkdirs();
File mFile = new File(Environment.getExternalStorageDirectory()
+ File.separator + "/.nomedia");
mFile.mkdirs();
FileOutputStream fOut = null;
try {
fOut = new FileOutputStream(file);
inImage.compress(Bitmap.CompressFormat.JPEG, 85, fOut);
fOut.flush();
fOut.close();
uri = MediaStore.Images.Media.insertImage(getContentResolver(), file.getAbsolutePath(), file.getName(), file.getName());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return uri;
}
如果我使用 file.mkdirs() 我得到 filenotfoundexception。如果我删除该行,我不会收到任何错误,但我的 uri 为空。
上述函数是否也返回文件路径?稍后我需要文件路径和 uri。任何帮助表示赞赏。
最佳答案
我想您不必添加其他扩展程序或其他东西,只需将它们保存在您应用程序的外部缓存目录中,图库应用程序将无法读取您的私有(private)目录,除非您通知它们。
所以将您的相机图像存储在这里,没有图库应用程序可以检测到它。
context.getExternalFilesDir(Environment.DIRECTORY_PICTURES);
示例代码
public static File createPictureFile(Context context) throws IOException {
Locale locale = Locale.getDefault();
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", locale).format(new Date());
String fileName = "JPEG_" + timeStamp + "_";
// Store in normal camera directory
File storageDir = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES);
return File.createTempFile(fileName, ".jpg", storageDir);
}
关于android - 从用户图库中隐藏相机图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49767898/