No meu aplicativo, o usuário deve selecionar um arquivo de áudio que o aplicativo manipula. O problema é que, para que o aplicativo faça o que eu quero com os arquivos de áudio, preciso que o URI esteja no formato de arquivo. Quando uso o reprodutor de música nativo do Android para procurar o arquivo de áudio no aplicativo, o URI é um URI de conteúdo, com a seguinte aparência:
content://media/external/audio/media/710
No entanto, usando o popular aplicativo gerenciador de arquivos Astro, recebo o seguinte:
file:///sdcard/media/audio/ringtones/GetupGetOut.mp3
O último é muito mais acessível para eu trabalhar, mas é claro que eu quero que o aplicativo tenha funcionalidade com o arquivo de áudio que o usuário escolhe, independentemente do programa usado para navegar em sua coleção. Então, minha pergunta é: existe uma maneira de converter o content://
estilo URI em um file://
URI? Caso contrário, o que você recomendaria para eu resolver esse problema? Aqui está o código que chama o seletor, para referência:
Intent ringIntent = new Intent();
ringIntent.setType("audio/mp3");
ringIntent.setAction(Intent.ACTION_GET_CONTENT);
ringIntent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(Intent.createChooser(ringIntent, "Select Ringtone"), SELECT_RINGTONE);
Eu faço o seguinte com o URI do conteúdo:
m_ringerPath = m_ringtoneUri.getPath();
File file = new File(m_ringerPath);
Em seguida, faça algumas coisas no FileInputStream com o referido arquivo.