2016-04-26 59 views
0

我正在编写一个可以上传文件的应用程序。通过使用StartActivityForResult或通过其他应用程序的共享菜单接收文件。使用URI的Android

我遇到了一些问题,通过共享菜单接收文件,具体确定文件信息。在上传之前,我需要知道文件的名称和大小。从应用程序(如图库应用程序或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)); 
} 

回答

1

是否有一种方式来获得从两种方案的URI文件的信息?

包裹file:content:Uria DocumentFile。然后在DocumentFile上拨打getType()length()。在file:getType()的情况下,我假定DocumentFile正在使用MimeTypeMap下面来尝试猜测MIME类型。

有没有一种方法可以保证它可以用于所有可能的URI?