Opa,
tenho uma atividade na qual o usuário pode escolher gravar um audio. Para isso, uso o gravador de audio nativo do Android.
Uso o seguinte metódo para iniciar a atividade de gravação de audio.
private void lancaAudio() {
Intent intent = new Intent();
intent.setAction(MediaStore.Audio.Media.RECORD_SOUND_ACTION);
try {
startActivityForResult(intent, IDF_ATIVIDADE_AUDIO);
} catch (ActivityNotFoundException e) {
showToast("Nenhum aplicativo para gravação de audio foi encontrado!");
}
}
E uso esse metódo para gravar o audio na /data/data/…/files do meu aplicativo:
private boolean gravaAudio(Intent intent, String nome) {
FileOutputStream fos = null;
FileInputStream fis = null;
try {
AssetFileDescriptor videoAsset = getContentResolver().openAssetFileDescriptor(intent.getData(), "r");
fis = videoAsset.createInputStream();
String pathAudio = getFilesDir() + "/" + nome + ".amr";
File audio = new File(pathAudio);
fos = new FileOutputStream(audio);
byte[] buf = new byte[1024];
int len;
while ((len = fis.read(buf)) > 0) {
fos.write(buf, 0, len);
}
return true;
} catch (IOException io) {
return false;
}
}
//Obs: esse metódo é chamado apos o usuário inserir um nome para o audio.
Até aqui tudo bem.
Fiz os testes usando um HTC e funcionou legal.
Mas agora estou usando um samsumg galaxy 5 e encontrei um problema.
Ele grava o audio normal, mas quando o usuário tenta ouvir o audio(também uso a app nativa do Android), ele não consegue encontrar a atividade que reproduz o arquivo.
Uso o metódo para abrir o arquivo:
private void abrir(File file) {
if (file.exists()) {
String ext = getExtension(file.getName());
String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), mime);
try {
startActivity(intent);
return;
} catch (ActivityNotFoundException e) {
}
}
showToast("Impossível ao abrir esse arquivo!");
}
A String mime retornada pelo metodo getMimeTypeFromExtension() é nula no Galaxy mas no HTC não.
Esse deve ser o problema.
Para resolver isso, preciso saber qual o tipo de audio que o aparelho cria o arquivo de audio.
No HTC ele grava audio no formato .amr e no Galaxy grava no formato .3gpp.
Observer que no meu metodo gravaAudio(), uso o seguinte código:
Tenho que alterar a string de extenão de acordo com a codificação do arquivo de audio para o metodo getMimeTypeFromExtension() funcionar na hora de visualizar o arquivo.
Resumindo:
Como sei a codificação do arquivo de audio retornado pela atividade de gravação de audio?
Muito Obrigado!


