2014-02-09 4 views
0

Я пытаюсь получить полный путь к звуковому файлу на SD-карте.Android Picking Sound File Path - полный путь не возвращается

Это запускает звуковую палитру - тогда я использую Play Music приложение, чтобы выбрать файл

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 ............. Использование вашего метод, он возвращает мне null для этого uri :( – NarendraJi

ответ

0

Мне нужно, чтобы получить полный путь назад, как я тогда хочу использовать его для воспроизведения файла.

Там не может быть путь (так как он не должен быть файл), не говоря уже о пути, который вы можете достичь (как файл не должен быть на хранении, которая доступна для вас).

MediaPlayer can use a Uri directly, поэтому я предлагаю идти по этому маршруту.

+0

Спасибо. Я также нашел способ получить полный путь от uri с помощью метода. Обновлен вопрос с помощью решения. Спасибо. – user3013243

+1

@ user3013243: Ваше «решение», не будут работать все время. Пожалуйста, не предполагайте, что все носители доступны через файл. Используйте 'Uri' с соответствующими методами в таких классах, как« MediaPlayer ». – CommonsWare

+0

Хорошо, спасибо за совет :). – user3013243