2014-02-09 73 views
0

我想獲得SD卡上聲音文件的完整路徑。Android拾取聲音文件路徑 - 完整路徑沒有返回

這將啓動聲音拾取 - 然後我使用Play音樂應用來選擇文件

Intent intent = new Intent(); 
    intent.setAction(Intent.ACTION_PICK); 
    intent.setData(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI); 
    startActivityForResult(intent, RESULT_SOUNDPICKER); 

上的活動結果,我想獲得的完整路徑

case RESULT_SOUNDPICKER: { 
    Log.d("TAG", "onActivityResult "+requestCode+" "+resultCode); 
     if (resultCode == RESULT_OK) 
     { 
      Uri uri = data.getData(); 
      String filePath = uri.getPath(); 
      Log.d("TAG", "FilePath: "+filePath); 

      // A song was picked. 
      Log.d("TAG", "PickSongActivity.onActivityResult: "+data.getDataString()); 
     } 
} 

但這返回的路徑像

//media/external/audio/media/13085 

而不是一個適當的文件保存路徑。 我需要獲取完整路徑,然後才能使用它來播放文件。

謝謝。

解決方案 此方法可用於獲取完整路徑。

private String getRealPathFromURI(Uri contentUri) { 
    String[] proj = { MediaStore.Images.Media.DATA }; 
    CursorLoader loader = new CursorLoader(getApplicationContext(), contentUri, proj, null, null, null); 
    Cursor cursor = loader.loadInBackground(); 
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
} 
+0

您添加的解決方案不適用於我 - 我的uri類似於 - content://com.android.externalstorage.documents/document/3C9E-F5D9 ............. 使用您的方法,它會返回給我的空URI: – NarendraJi

回答

0

我需要得到完整路徑回來,我則想用它來播放該文件。

可能沒有的路徑(因爲它沒有必須的文件),更何況是一個路徑,你可以到達(如文件不必須要對存儲是您可以訪問)。

MediaPlayer can use a Uri directly,所以我建議去那條路線。

+0

謝謝。我還發現了一種方法,通過使用方法從uri獲取完整路徑。使用解決方案更新了問題。謝謝。 – user3013243

+1

@ user3013243:您的「解決方案」不會一直工作,請不要假設所有的媒體都可以通過文件訪問,請使用類似'MediaPlayer'的類的'Uri'。 – CommonsWare

+0

好的,謝謝你的建議:)。 – user3013243