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?
没有
我正在编写一个可以上传文件的应用程序。这些文件要么通过使用 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?
没有