从 ACTION_OPEN_DOCUMENT 获取文件名

get the filename from ACTION_OPEN_DOCUMENT

我在我的 Android 移动应用程序中使用 Intent(Intent.ActionOpenDocument) 和 OnActivityResult() 很好。 (目标 Android 10,API 29)。用户 select 有一个音频文件,应用可以很好地播放该文件。该用户可以从其设备上的任何位置 select 文件。

我想显示 UI 中正在播放的文件的名称。如何获取文件名?

在 OnActivityResult 中,这个:ReturnedIntent.Data.Path、returns 这个:

/document/content://com.microsoft.skydrive.content.metadata/Drive/RID/phil%40mydomain.com/Item/RID/DC9388F99D04BA56%21369828/Property/?RefreshOption=AutoRefresh&RefreshTimeOut=15000&CostAttributionKey=11-21-1

其中没有类似文件名的内容。我在这方面找到了较旧的堆栈帖子,但它们对我不起作用。我感觉问题出在我需要授予应用程序的 Android 安全 and/or 权限。

如何抓取文件名以便在 UI 中显示?

感谢@CommonsWare,您为我指明了正确的方向。在智能感知的帮助下,我注意到返回的 Intent 的 .Data 属性 是一个 Uri。这就是 (C# Xamarin) 最终的工作方式。

public override void OnActivityResult(int requestCode, int resultCode, Intent data)
{
    base.OnActivityResult(requestCode, resultCode, data);
    if (resultCode == -1 && requestCode == 42)
    {
        Intent ReturnedIntent = data;
    // the code is in a Fragment here so we use Activity for the Context
        DocumentFile df = DocumentFile.fromSingleUri(Activity, ReturnedIntent.Data);
        string FileName = df.Name;  // that contains the filename

永远不会自己得到这个。我喜欢 Android Java 和 Xamarin C# 如此接近。再次感谢@CommonsWare。