使用外部Android应用程序安全打开文件,而无需将文件复制到外部存储器

时间:2012-09-12 10:43:02

标签: android security file-io android-sdcard

我正在做一个安全的应用程序,用户可以浏览某个文件并使用手机上的应用程序打开它们。所以现在,我的应用程序非常安全,文件加密很好,但我有一个MAJOR休息时间。实际上,我正在使用我的应用程序来打开不同类型的用户安全文件(pdf,doc,txt,jpg,...),因此我使用用户手机上的外部应用程序打开它们。但我的问题在这里,因为要让另一个应用程序打开这些文件,我需要为我想要使用的应用程序提供一个Android存储位置。

以下是我正在使用的代码:

Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
File fileToOpen = new File(activity.getExternalCacheDir().getAbsolutePath() + 
    "/" + fileName);

MimeTypeMap mime = MimeTypeMap.getSingleton();
String extension = fileToOpen.getName().substring(
        fileToOpen.getName().lastIndexOf(".") + 1);
String type = mime.getMimeTypeFromExtension(extension);
intent.setAction(Intent.ACTION_VIEW);

intent.setDataAndType(Uri.fromFile(fileToOpen), type);

Manager.getActivity().startActivityForResult(intent,
        ExplorerActivity.FILE_CLOSED_SUCCESSFULLY);

所以,正如你在我的代码中看到的,我需要将我的真实文件存储到缓存目录中以打开它,所以如果小偷可以访问用户手机,它可以打开真实文件进入这个目录所以我的申请不再安全。 当然我正在删除这个普通文件后,用户关闭它并加密了它,但删除并不意味着该文件已从手机中完全删除。在删除之前,我用一些空字节重写,但这对于这个文件的安全删除是不够的。

所以现在,我想要你想要实现我想做的事情:打开文件而不将其存储到Android硬盘中。

以下是我的一些主要内容:

  • 使用我自己的应用程序打开文件(但实现起来很多,因为文件类型太多,我真的不喜欢开发已存在的东西)
  • 找到一个打开文件的解决方案,而不将其存储在我的应用程序外部(我的意思是直接使用此文件的字节数组打开文件)
  • 将文件存储到手机RAM中(我不知道是否可以)

所以这是一份非详尽的清单,任何其他建议都将受到赞赏。如果您能就我提出的解决方案之一提供任何帮助,请不要犹豫。如果我的一个想法完全不可能或错误,请不要犹豫告诉我。

1 个答案:

答案 0 :(得分:4)

您是否尝试过自己的contentProvider覆盖openFile,因此您打开了应用程序专用的文件,并返回其他应用可访问的filedescriptor