Android:如何访问、复制和操作音乐文件

Android:如何访问、复制和操作音乐文件,android,android-intent,android-file,mediastore,Android,Android Intent,Android File,Mediastore,我当前通过创建一个意图来访问音乐文件 Intent intent = new Intent(); intent.setType("audio/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent,"Select Audio "), MUSIC_CODE); 当媒体选择器出现时,我可以成功地选择一个文件并提取相应的URI @Override prot

我当前通过创建一个意图来访问音乐文件

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):


在Android中,所有与媒体文件相关的数据都保存在MediaStore数据库中。因此,有了URI,您可以查询MediaStore数据库并检索文件路径。请参阅以下问题:


我已尝试遵循您的建议,但没有成功-请参阅上面的编辑此代码看起来不错。但是为了访问MediaStore,您应该在清单文件中具有android.permission.READ_EXTERNAL_存储权限。
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();
        }
    }
}