Android 使用 URI

Android working with URIs

我正在编写一个可以上传文件的应用程序。这些文件要么通过使用 StartActivityForResult 接收,要么通过其他应用程序的共享菜单接收。

我 运行 在通过共享菜单接收文件时遇到了一些问题,特别是确定文件信息。在上传之前,我需要知道文件的名称和大小。从图库应用程序或 Google 照片等应用程序共享时,一切正常 - 收到具有 content:// 方案的 URI,我可以使用 ContentResolver 获取名称和大小。但是我从一些应用程序收到一个带有 file:// 方案的 URI,并且相同的方法不再有效。有没有办法通过两种方案从 URI 获取文件信息?有没有办法保证它适用于所有可能的 URI?

获取文件信息的代码:

string folderName = "";
Android.Net.Uri tempUri = null;
switch (Intent.Action) {
case Intent.ActionSend:
    var result = Intent.GetParcelableExtra (Intent.ExtraStream);
    tempUri = Android.Net.Uri.Parse(result.ToString());
    break;
case Intent.ActionSendMultiple:
    var uris = Intent.GetParcelableArrayListExtra(Intent.ExtraStream);
    tempUri = Android.Net.Uri.Parse(uris[0].ToString());
    break;
}

if (tempUri != null) {
    var cursor = this.ContentResolver.Query (tempUri, null, null, null, null);
    if (cursor != null && cursor.MoveToFirst ())
        folderName = cursor.GetString (cursor.GetColumnIndex (Android.Provider.OpenableColumns.DisplayName));
}

Is there a way to get file info from URIs with both schemes?

file:content: Uri 包裹在 a DocumentFile 中。然后,在 DocumentFile 上调用 getType()length()。在 file:getType() 的情况下,我假设 DocumentFile 在幕后使用 MimeTypeMap 来尝试猜测 MIME 类型。

And is there a way that guarantees that it will work for all possible URIs?

没有