從URI

2014-04-18 37 views
0

獲取文件名我怎樣才能得到一個文件名從OnActivityResult返回uri, 我嘗試使用的代碼從URI

Uri uri = data.getData(); String fileName = uri.getLastPathSegment();

這一點,但它只是返回這樣的事情images:3565。選擇的文件不僅是圖像類型,還可以是視頻或文檔文件等。我意識到,從kitkat返回的uri與以前的版本不同,我會對一種方法感興趣也適用於pre kitkat。

回答

4

這是我使用從URI獲取信息的代碼:

public static class FileMetaData 
{ 
    public String displayName; 
    public long size; 
    public String mimeType; 
    public String path; 

    @Override 
    public String toString() 
    { 
     return "name : " + displayName + " ; size : " + size + " ; path : " + path + " ; mime : " + mimeType; 
    } 
} 


public static FileMetaData getFileMetaData(Context context, Uri uri) 
{ 
    FileMetaData fileMetaData = new FileMetaData(); 

    if ("file".equalsIgnoreCase(uri.getScheme())) 
    { 
     File file = new File(uri.getPath()); 
     fileMetaData.displayName = file.getName(); 
     fileMetaData.size = file.length(); 
     fileMetaData.path = file.getPath(); 

     return fileMetaData; 
    } 
    else 
    { 
     ContentResolver contentResolver = context.getContentResolver(); 
     Cursor cursor = contentResolver.query(uri, null, null, null, null); 
     fileMetaData.mimeType = contentResolver.getType(uri); 

     try 
     { 
      if (cursor != null && cursor.moveToFirst()) 
      { 
       int sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE); 
       fileMetaData.displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)); 

       if (!cursor.isNull(sizeIndex)) 
        fileMetaData.size = cursor.getLong(sizeIndex); 
       else 
        fileMetaData.size = -1; 

       try 
       { 
        fileMetaData.path = cursor.getString(cursor.getColumnIndexOrThrow("_data")); 
       } 
       catch (Exception e) 
       { 
        // DO NOTHING, _data does not exist 
       } 

       return fileMetaData; 
      } 
     } 
     catch (Exception e) 
     { 
      Log.e(Log.TAG_CODE, e); 
     } 
     finally 
     { 
      if (cursor != null) 
       cursor.close(); 
     } 

     return null; 
    } 
} 
+0

我會試一試,看看,感謝您的快速回復。 – kabuto178

+0

這項工作到目前爲止,感謝分享。 – kabuto178