2014-06-11 415 views
0

我試圖獲取內容URI的文件路徑。 URL如下所示: content://com.android.providers.downloads.documents/document/31Android使用contentResolver從內容URI獲取文件路徑

遊標對象不爲空,但cursor.getString(column_index)返回null。
列索引始終爲0

public static String getPath(Context context, Uri uri) throws URISyntaxException { 
    if ("content".equalsIgnoreCase(uri.getScheme())) { 
     String[] projection = { "data"}; 
     Cursor cursor = null; 

     try { 
      cursor = context.getContentResolver().query(uri, projection, null, null, null); 
      int column_index = cursor.getColumnIndexOrThrow("_data"); 
      if (cursor.moveToFirst()) { 
       // Method returns here with null value 
       return cursor.getString(column_index); 
      } 
     } catch (Exception e) { 
      // Eat it 
     } 
    } 
    else if ("file".equalsIgnoreCase(uri.getScheme())) { 
     return uri.getPath(); 
    } 

    return null; 
} 

編輯:從文件管理器返回URI,所以應該代表實際的文件內容。

public void filePicker(View view) { 
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
    intent.setType("*/*"); 
    intent.addCategory(Intent.CATEGORY_OPENABLE); 

    try { 
     startActivityForResult(
       Intent.createChooser(intent, "Select a File to Upload"), 
       FILE_SELECT_CODE); 
    } catch (android.content.ActivityNotFoundException ex) { 
     // Potentially direct the user to the Market with a Dialog 
     Toast.makeText(this, "Please install a File Manager.", 
       Toast.LENGTH_SHORT).show(); 
    } 
} 

回答

2

我想獲得的文件路徑爲內容URI

沒有規定一個content://Uri指向一個文件,更不用說一個可以訪問。如果要訪問文件中的數據,請使用ContentResolveropenInputStream()openOutputStream()

+0

從文件管理器返回內容Uri – Merch

+2

@Merch:有成千上萬的Android應用程序 - 在設備上和在Play商店中 - 可以響應'ACTION_GET_CONTENT'獲取' */*'。沒有要求他們返回的內容指向一個文件,更不用說可以訪問的文件了。它是*用戶*,不是你,他選擇哪個應用程序響應你的'startActivity()'調用。 – CommonsWare

+1

用戶將在我的公司內部不是隨機的,因此他們需要選擇一個文件管理器。目標是將選定的文件上傳到內部Web服務器。 – Merch