소프트 키보드에서 음성인식 서비스에 대해서 질문 드려요 급해요 ㅠ_ㅠ..
이제 점점.... 마지막을 향해서 가고 있습니다..
그런데 음성인식부분을 하려는데...
public class MainActivity extends Activity implements OnClickListener
{
private static final int VOICE_RECOGNITION_REQUEST_CODE =
1234;
private ListView mList;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// Inflate our UI from its XML layout description.
setContentView(R.layout.main);
// Get display items for later interaction
Button
speakButton = (Button) findViewById(R.id.btn_speak);
mList = (ListView) findViewById(R.id.list);
// Check to see if a recognition activity is present
PackageManager pm = getPackageManager();
List<ResolveInfo>
activities = pm.queryIntentActivities(
new
Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
if
(activities.size() != 0) {
speakButton.setOnClickListener(this);
} else {
speakButton.setEnabled(false);
speakButton.setText("Recognizer
not present");
}
}
/**
* Handle the click on the start recognition button.
*/
public void onClick(View v) {
if (v.getId() ==
R.id.btn_speak) {
startVoiceRecognitionActivity();
}
}
/**
* Fire an intent to start the speech recognition
activity.
*/
private void startVoiceRecognitionActivity()
{
Intent intent = new
Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition
demo");
startActivityForResult(intent,
VOICE_RECOGNITION_REQUEST_CODE);
}
/**
* Handle the results from the recognition activity.
*/
@Override
protected void onActivityResult(int requestCode, int
resultCode, Intent data) {
if (requestCode ==
VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK)
{
// Fill the list view with the strings the recognizer thought
it could have heard
ArrayList<String> matches =
data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
mList.setAdapter(new
ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
matches));
}
super.onActivityResult(requestCode, resultCode, data);
}
}
기본 음성인식 제공 샘플 소스 입니다. 위소스와 첨부한 음성인식 API해석본을 가지고... 다음과 같이 수정 했습니다
try {
Intent intent = new
Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
"voice");
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE,
Locale.getDefault());
startActivityForResult(intent,17);
//startActivity(intent);
} catch
(ActivityNotFoundException e) {
}
근데 여기서 문제점은... api문서에도 나와있지만 결과를 받으려면... startActivityForResult(Intent, int)을
통해 반환된다는데...
소스를 수정하면....... 메소드만 추가하라고 나오지... 여기서 어떻게 바꿔야 할지를
모르겠습니다...
도움 좀 주세요 ㅠ_ㅠ........ 어렵게 어렵게 여기까지 왔는데...... 더이상 진척이
없네요.......
그냥 startActivity(intent)하면.... 음성인식 창만 뜨고 인식 실행은 되지 않습니다...
결론적으로 startActivityForResult를 써야 하는데......... 하..... 기본 제공 샘플 소스에도 어디에도 그런
메소드는 없는데..
어떻게 처리해야 하나요 ㅠ_ㅠ..
ACTION_WEB_SEARCH 로 수정하면......... 웹 서치는 잘되는데....... 음성인식은 안되고 있습니다... 음성인식후..
처리값만 받아오면
되는데...... 도와주세요 ㅠ_ㅠ...

startActivityForResult 메서드는 Activity 클래스로부터 상속받아 내려오는 메서드 입니다.
해당 메서드가 호출되는 곳이 InputMethodService 클래스를 상속받은 클래스이기에 위 메서드가 존재하지 않는 것이겠지요.
마찬가지로 onActivityResult도 Activity 클래스에서 정의된 메서드입니다. 그러므로 위 코드가 동작하지 않는 것이지요..
interface SoftKeyboardListener {
public void onStartVoiceRecorgnizer();
}
소프트키보드 클래스에 리스너 인터페이스를 정의하고 멤버변수를 선언하고 get/set 메서드를 만든 후
키보드가 보여지는 시점에 액티비티 코드에서
setSoftKeyboardListener(this)로 리스너를 액티비티 자신으로 등록해 준후
소프트키보드 클래스의 onKey메서드에서 만들어진 Intent를 파라미터로 하여
getSoftKeyboardListener().onStartVoiceRecorgnizer() 를 호출을 하고
해당 activity에서
onStartVoiceRecorgnizer와 onActivityResult를 구현한 후
onStartVoiceRecorgnizer에서는 onKey 메서드에 작성하신 대로 Intent를 만들어
startActivityForResult 를 호출하면 되겠습니다.
body {font-size:.75em; line-height:1.6; font-family:Sans-serif; height:300px; padding:0; margin:0; background-color:transparent; color:#000;}
SpeechRecognizer sr = SpeechRecognizer.createSpeechRecognizer(getApplicationContext());
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "voice");
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
sr.startListening(intent);
말씀하신 SpeechRecognizer 를 참고해서 이렇게 작성을 했는데 .......
작동이 안되네요 ㅠ_ㅠ;; 예제 소스 하나만 짜주실수없을까요.......
아 제가 잘못 답변 달았네요..;
SpeechRecognizer를 사용하시면 기본 음성인식 액티비티를 통하지 않고
음성인식 서비스를 사용할 수 있습니다.