首页 > 解决方案 > 如何从文件管理器获取打开的应用程序并获取该文件的路径?

问题描述

我想通过单击文件(几乎完成)从文件管理器打开我的应用程序并播放该文件。但是我怎样才能得到那个特定视频文件的路径以便我可以打开它呢?
在清单内的活动中使用以下代码(显示红色错误但工作)后,我的应用程序显示为打开该文件的选项:

<intent-filter>
     <action android:name="android.intent.action.VIEW"/>
     <category android:name="android.intent.category.DEFAULT"/>
     <data android:mimeType="video/*"/>
</intent-filter>

图片:
在此处输入图像描述

在显示上图之前,如何获取我在文件管理器中单击的文件的路径

标签: androidandroid-studio

解决方案


但是我怎样才能得到那个特定视频文件的路径以便我可以打开它呢?

很多时候,你不知道。

你调用getIntent()那个Activity有那个的<intent-filter>,然后你调用那个getData()来获取Uri用户希望查看的内容。

有时,鉴于<intent-filter>,你会得到一个Uri谁的方案是file。在这种情况下,调用getPath()Uri返回一个文件系统路径。您不太可能使用该路径,尤其是在 Android 10 及更高版本上,因为无论启动您的应用程序都有错误 -file Uri自 Android 7.0 以来,这些值通常已被禁止。

更多时候,你会得到Uri另一个方案。在这些情况下,Uri不一定代表文件系统上您可以访问的文件。相反,您可以根据方案做一些事情来访问内容:

  • 对于contentor android.resource(or file) 的方案,使用ContentResolverandopenInputStream()来获取InputStream内容
  • 对于httpor的方案https,使用您最喜欢的 HTTP 客户端 API(例如 OkHttp)下载内容
  • 依此类推,对于您希望支持的任何计划

如果您想将活动限制为仅支持方案的子集,请使用<data>中的元素<intent-filter>列出您支持的方案。

在您的情况下,如果您要播放视频,您可以将 传递Uri给您用于视频播放的任何内容(例如,ExoPlayer),并让它处理实际加载内容的所有麻烦。


推荐阅读