소프트 키보드에서 음성인식 서비스에 대해서 질문 드려요 급해요 ㅠ_ㅠ..


이제 점점.... 마지막을 향해서 가고 있습니다..

그런데 음성인식부분을 하려는데...

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 로 수정하면......... 웹 서치는 잘되는데....... 음성인식은 안되고 있습니다... 음성인식후.. 처리값만 받아오면
되는데...... 도와주세요 ㅠ_ㅠ...

HangulKeyboard.zipHangulKeyboard.zip android_reference_-_speech.pdf