2012-06-19 3 views
0

나는 SpeechRecognizer Listner 활동을 연구 중이다.js 함수에서 SpeechRecognizer listner 응답을 얻는 방법?

나는 웹보기 버튼을 클릭에서 (startListning (의도)) 의도를 유발하고 자바 스크립트

act.startFun(); 

을 던졌다 그리고 startFun() 메소드가 내 MainActivity.java 파일에 선언

public void startFun(){ 
     Log.d(TAG,"ONCLICK"); 
     Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);   
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
     intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,"voice.recognition.test"); 
     intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS,5); 
     sr.startListening(intent); 
    } 

및 내 SpeechRecognizer Listner는 다음과 같습니다

class listner implements RecognitionListener{ 
      public void onResults(Bundle results) { 
      end=1; 
      Log.d(TAG, "onResults"); 
     } 

     public void onRmsChanged(float rmsdB) { 
      Log.d(TAG, "onRmsChanged"); 
     } 
    } 

내 요구 사항은 통과하고 싶습니다. onResults (번들 결과)의 결과 문자열을 javascript 메서드에 전달합니다.

제발 좀 도와주세요.

답변

0

JavaScript 함수에 변수를 전달하는 쉬운 방법은 없지만 ... 클래스 JavaScriptInterface를 만들고 준비가되었을 때 JavaScript를 사용하여 문자열을 가져올 수 있습니다.

webview.addJavascriptInterface(new JavaScriptInterface(),"Interface"); 

JavaScriptInterface 클래스에서 호출 할 함수를 나열하십시오. 자바 스크립트에서 다음 ...

Interface.getStringResult(); 

또한 인터페이스가 자바 스크립트에 존재하는지 확인하는 함수를 만들 수 있습니다 : 답장을 보내

function runningInAndroidApp() { 
    if (typeof Interface != 'undefined') { 
     return true; 
    } 
    return false; 
} 
+0

조엘 덕분에. 이미 나는 이것을 알고있다. 내 게시물을 참조하십시오 코드 act.startFun()을 게시했습니다 - "행동"은 자바 스크립트 인터페이스입니다. – littledev

+0

내 요구 사항은 var response = Interface.init()입니다. init은 speechRecognization을 호출 할 것이고 init() 메서드 자체에서 Speech Listner의 onResult() 메서드에 대한 응답이 필요합니다. – littledev

+0

요구 사항이 이제 다소 불분명 해 보입니다. 그러나 자바 스크립트로 데이터를 보내는 유일한 방법은 반환하는 것입니다. 이러한 인터페이스 중 하나에서 기본 데이터 유형 (또는 문자열). loadUrl()을 사용하여 javascript 함수를 호출 할 수는 있지만 인수를 전달할 수는 없습니다. – Joel