2014-05-20 21 views
0

我目前通過創建一個Intent安卓:如何訪問,複製和操作音樂文件

Intent intent = new Intent(); 
intent.setType("audio/*"); 
intent.setAction(Intent.ACTION_GET_CONTENT); 
startActivityForResult(Intent.createChooser(intent,"Select Audio "), MUSIC_CODE); 

當媒體選擇出現訪問音樂文件,我可以成功地選擇一個文件,並提取相應的URI

@Override 
protected void onActivityResult (int requestCode, int resultCode, Intent data){ 
    if(requestCode == MUSIC_CODE){ 
     if(resultCode == RESULT_OK){ 
      //uri.getPath() 
     } 
    } 

    super.onActivityResult(requestCode, resultCode, data); 
} 

使用URI的路徑(例如:/document/primary:music/filename.ext),實際上,我怎麼訪問該文件對其進行操作或複製?在此先感謝您的任何鏈接或提示,謝謝!

編輯:我試圖讓從URI一個真正的路徑,但沒有成功,但如下(方法不斷返回null):

public String getRealPathFromURI(Uri contentUri) { 
    Cursor cursor = null; 
    try { 
     String[] proj = { MediaStore.Audio.Media.DATA }; 
     cursor = getContentResolver().query(contentUri, proj, null, null, null); 
     int column_index = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA); 
     cursor.moveToFirst(); 
     return cursor.getString(column_index); 
    } 
    finally { 
     if (cursor != null) { 
      cursor.close(); 
     } 
    } 
} 

回答

0

在Android中所有相關的媒體文件的數據的持久化MediaStore數據庫。因此擁有一個URI可以查詢MediaStore數據庫並檢索文件路徑。請參考這個問題:

Get filename and path from URI from mediastore

+0

我也想你的建議下,但沒有成功 - 請看上面的編輯 –

+0

該代碼看起來不錯。但爲了訪問MediaStore,您應該在清單文件中擁有** android.permission.READ_EXTERNAL_STORAGE **權限。 –