我正在写一个应用程序,可以上传文件。这些文件要么使用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));
}发布于 2016-04-26 11:15:30
是否有一种方法可以从URI获得这两种方案的文件信息?
将file:或content: Uri包装在DocumentFile中。然后,在getType()和length()上调用DocumentFile。在file:和getType()的例子中,我假设DocumentFile在封面下使用MimeTypeMap来尝试猜测MIME类型。
是否有一种方法可以保证它对所有可能的URI都有效呢?
不是的。
https://stackoverflow.com/questions/36861747
复制相似问题