每个 android 设备上的应用程序是否有任何永久不可移动的全局存储可用?

Is there any permanent non removable global storage available for the applications on each android device ?

我需要将数据存储在 android 设备上,并希望从不同的应用程序访问这些数据(通过后台服务)。

我们可以使用外部存储来实现这一点。但如果它是可移动的,那么在安装到 PC 或移除时可能无法使用。那么,每个 android 设备上的所有应用程序是否始终可以使用任何永久不可移动的全局存储?如果是这样,我如何访问它。

请指导我。提前致谢。

But it may possible that if it is removable then it will not be available when mounted to PC or removed.

"mounted to PC" 在 Android 3.0+ 上不是问题,尽管它在 Android 1.x/2.x 上是问题。 Android 3.0+ 设备上的外部存储很少可移动。

So, Is there any permanent non removable global storage always available for the all applications on each android device ?

外部存储就在您想要的范围之内。这意味着您可能希望重新考虑您最初的计划。根据您的应用程序的性质,答案可能是一个应用程序将数据存储在内部存储中,并通过 ContentProvider 将数据提供给您套件中的其他应用程序。这比外部存储具有更细粒度的安全可能性。

每个设备 运行 android 4.0+ 都是基于 MTP (MEDIA TRANSFER PROTOCOL) 这意味着如果您将设备安装到 PC 上,它仍然可以用于您的应用程序,所以不要太担心了。你一定看过一些关于这个的过时文章。

编辑: 根据 CommonsWare 的回答,它甚至是 3.0+,但是设备 运行 Android 3.x太稀有了,基本都死了。

文件系统存储不会帮助你,因为你的应用程序可以read/write所有其他应用程序也可以read/write/删除,你最终会遇到与 sdcard 部分类似的情况。

顺便说一句:连接到 PC 时卸载 sdcard 部分仅适用于过时的设备。目前的设备只使用MTP协议,允许Android和PC同时访问

如果多个应用协同工作,则可以通过多种方式相互共享数据:

  1. 在每个应用中使用 sharedUserId 功能 (AndroidManifest.xml)。
  2. 制作一个 "storing-app" 具有一个或多个提供程序以访问来自不同应用程序的数据。使用自定义权限保护它们。

您可以将内部存储与 FileOutputStream 一起使用,如 here in the documentation 所述。

默认情况下,这些文件对您的应用程序是私有的,但您可以使用 Context.MODE_WORLD_WRITEABLE or Context.MODE_WORLD_READABLE 更改它。

但是请小心,因为它可能会导致您的应用出现一些安全问题。也许您可以使用 Intents 或其他方式在您的应用程序之间实现 link。

有关这方面的更多信息,请参阅 documentation

  1. 对于轻量级基元(strings/ints 等),您可以写入系统设置,最终用户很难删除。
  2. 您可以使用标志Context.MODE_WORLD_READABLE公开应用程序的数据。
  3. 对结构化数据使用 ContentProvider。使用权限和权限,以便只有您的应用程序被允许 read/write 到内容提供商。
  4. 外部存储,但如您所说,并不可靠。它上面的数据是 public 并且对所有应用程序和最终用户都是可见的。数据很容易被用户和一些清理应用程序删除。