4

https://developer.android.com/training/secure-file-sharing/setup-sharing.htmlAndroid 7 nougat,如何从uri的传入意图获取文件路径?

我知道在android nougat中改变文件策略。 文件共享到其他应用程序的通缉应用程序通过FileProvider生成uri。 uri格式为content://com.example.myapp.fileprovider/myimages/default_image.jpg

我想知道如何从uri产生FileProvider.getUriForFile()获得filepath。 因为我的应用程序需要知道物理文件路径,以保存,加载,readinfo等 是有可能

[总之]

  1. 我的应用程序在其他应用中收到的意图URI在andorid 7牛轧糖。
  2. uri格式为content://com.example.myapp.fileprovider/myimages/default_image.jpg
  3. 也许它是由FileProvider.getUriForFile生成的。
  4. 我想知道从uri获取文件路径的方式。
  5. 我只能从getContentResolver().openFileDescriptor()获取MIME类型,显示名称,文件大小和读取binay。 但我想知道文件路径。
+1

如果您可以从流中进行二进制读取,您可以从流中读取数据。用它。不需要文件路径。只有文件提供者应该能够告诉你文件路径,但它不会。反思。重新设计。你不需要文件路径。 – greenapps

+1

“我的应用程序需要知道物理文件路径才能保存,加载,读取信息等。” - 然后使用'ContentResolver'和'openInputStream()'制作你自己的内容副本。您不仅可以确定路径,但即使可以,也很可能无法访问该文件的文件系统。 – CommonsWare

回答

4

您无法获得Uri的“文件路径”,原因很简单,因为没有要求Uri指向文件。使用ContentResolver和类似openInputStream()的方法来访问Uri表示的内容。

要与使用内容URI的其他应用程序共享文件,您的应用必须 生成内容URI。要生成内容URI,请为该文件创建一个新的 文件,然后将该文件传递给getUriForFile()。您可以发送 将getUriForFile()返回的内容URI发送到 意图中的另一个应用程序。接收内容URI的客户端应用程序可以通过调用ContentResolver.openFileDescriptor 来打开文件 并访问其内容,以获取ParcelFileDescriptor。 来源:Android developers

+1

'要使用内容URI与另一个应用程序共享文件,您的应用程序必须执行FileProvider。 – greenapps