3

我正在做一个安全的应用程序,用户可以在其中浏览一些文件并使用手机上的应用程序打开它们。所以现在,我的应用程序非常安全,文件加密得很好,但我有一个重大突破。实际上,我正在使用我的应用程序打开不同类型的用户安全文件(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 硬盘中。

以下是我的一些线索:

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

所以这是一个非详尽的列表,任何其他建议将不胜感激。如果您可以就我提出的解决方案之一提供任何帮助,请不要犹豫。如果我的某个想法完全不可能或错误,请不要犹豫告诉我。

4

1 回答 1

4

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

于 2012-09-12T10:47:12.890 回答