마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

RecognizerIntent를 이용한 파일 저장 방법 질문입니다.

0 추천

안녕하세요.

구글 음성 인식을 이용해서, 글쓰기를 할때 활용하려하거든요.

Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
i.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getPackageName());
i.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "ko-KR");
i.putExtra("android.speech.extra.GET_AUDIO_FORMAT", "audio/AMR");
i.putExtra("android.speech.extra.GET_AUDIO", true);
startActivityForResult(i, VOICE);

위와 같이 해서 GET_AUDIO를 true로하고, AMR파일을 얻어올 수 있게 했습니다.

그리고 Activity Result쪽에서는..

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    ArrayList<String> speechList = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
    String result = speechList.get(0);
    Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();

 
// 저장
    Uri audioUri = data.getData();
    Log.i("audioUri", audioUri.toString());
}

일단 RecognizerIntent.EXTRA_RESULTS의 문자열 들 중 가장 유사한 것이 0번이니까 유사한 단어를 그냥 토스트로 보구요.. 그 이후에 이 녹음한 파일을 저장해야하거든요.

일단 data.getData()로 해당 amr파일의 URI값을 얻어와 해당 파일의 주소를 알고 얻어왔습니다. 이 uri를 갖고 음악파일로 저장하려하는데요.

 

구글링을 통해 얻어온 곳에서는

저 audioURI 밑 부분에

ContentResolver contentResolver = getContentResolver();
try {
    InputStream filestream = contentResolver.openInputStream(audioUri);
    Log.i("fileStream",filestream.toString());
} catch (Exception e){
}

이런식으로 InputStream으로 받던데요. InputStream으로 받는 이유가 뭔가요???

아직 파일 저장이 익숙치가 않아서 ㅠㅜ

 

혹시 아시면 답변 부탁드립니다 (__)

 

 

 

겸군님 (1,900 포인트) 님이 2017년 3월 21일 질문
겸군님님이 2017년 3월 22일 수정

1개의 답변

0 추천
 
채택된 답변
File 메소드로 접근가능한 uri가 나올 경우도 있겠지만.

보통은 content:// 로 시작되는 uri가 반환되기 때문에,

이를 처리할 수 있는 ContentResolver 를 사용해서 inputStream을 얻어오는 겁니다.
익명사용자 님이 2017년 3월 21일 답변
겸군님님이 2017년 3월 22일 채택됨
...