"file" 方案的 URI 如何在 Android 中工作

how do URIs with "file" scheme work in Android

我知道在 Android 我可以这样从磁盘读取文件:

Uri uri = Uri.parse("file:///data/data/com.example.mytest.mytest/test.txt");
InputStream stream = getContentResolver().openInputStream(uri);
int i;
while ((i = stream.read()) != -1) {
  Log.i("@@@", "znak: " + i);
}

但是,我不知道它是如何工作的。 Android 是否存在一些使用 "file" 方案的内容提供商?但是如何 - 我认为所有内容提供者的 URI 方案必须具有 "content" 方案?

ContentResolveropenInputStream() 直接处理 file: 方案。 the documentation for openInputStream().

中对此进行了介绍

此外,不要对路径进行硬编码。你的 Uri 在数百万台设备上是错误的:

  • 在 Android 4.2+ 平板电脑和 Android 5.0+ 手机上,用于访客和其他辅助帐户

  • 在 Android M 设备上,如果用户 "adopts" 可移动存储并将应用程序移动到其中