음성인식으로 메모, 계산기를 사용할 수 있는 앱을 만들고 있습니다.
음성인식을 하는 코드가 메모와 계산기에서 중복으로 사용되기 때문에 하나로 만들고 싶은데 안드로이드 초보다 보니 조금 헤매고 있습니다.
파일은 크게 Speech.java Memo.java Cal.java가 있고
Speech.java는 맨 아래코드와 같습니다.
원하는 것은 Memo.java, Cal.java에서 Speech를 import해와서 SpeechStart() 실행하면 결과값 return받고 싶습니다.
제가 한것으로
import com.example.lee.firsttest.Speech;
Speech ch = new Speech();
ch.SpeechStart();
로 하니 에러가 뜹니다.
public void onResults(Bundle results)
를 public String onResults로 바꾸고 return builder.toString() 하려니 카카오 API쓰는 거라 안되네요
해결방법 조언 부탁드리겠습니다.
package com.example.test;
import android.app.Activity;
import com.kakao.sdk.newtoneapi.SpeechRecognizeListener;
public class Speech extends Activity implements SpeechRecognizeListener {
private SpeechRecognizerClient client;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SpeechRecognizerManager.getInstance().initializeLibrary(this);
SpeechStart();
}
public void SpeechStart(){
//음성 인식 실행
String serviceType = SpeechRecognizerClient.SERVICE_TYPE_WORD;
if(PermissionUtils.checkAudioRecordPermission(this)) {
SpeechRecognizerClient.Builder builder = new SpeechRecognizerClient.Builder().
setServiceType(serviceType);
if (serviceType.equals(SpeechRecognizerClient.SERVICE_TYPE_WORD)) {
String Dict = "메모,계산기";
Dict = Dict.replace(',','\n');
builder.setUserDictionary(Dict);
}
client = builder.build();
client.setSpeechRecognizeListener(this);
client.startRecording(true);
//실행
}
}
@Override
public void onDestroy() {
super.onDestroy();
// API를 더이상 사용하지 않을 때 finalizeLibrary()를 호출한다.
SpeechRecognizerManager.getInstance().finalizeLibrary();
}
@Override
public void onResults(Bundle results) {
final StringBuilder builder = new StringBuilder();
Log.i("MainActivity", "onResults");
ArrayList<String> texts = results.getStringArrayList(SpeechRecognizerClient.KEY_RECOGNITION_RESULTS);
ArrayList<Integer> confs = results.getIntegerArrayList(SpeechRecognizerClient.KEY_CONFIDENCE_VALUES);
builder.append(texts.get(0));
final Activity activity = this;
runOnUiThread(new Runnable() {
@Override
public void run() {
if (activity.isFinishing()) return;
Log.i("MainActivity", "builder.toString() : " + builder.toString());
} //결과가 builder.toString()
});
client = null;
}
@Override
public void onFinished() {
Log.i("MainActivity", "onFinished");
}
}