Java 安卓语音识别赢得';I don’我不在另一个班工作
我是Android开发的初学者。我试图创建的是一个应用程序,它与您交谈,然后等待您的回答,这样它的文本到语音工作,然后它激活语音识别,用我的代码,文本到语音工作,然后它调用语音识别。然后显示错误消息,执行捕获块。Java 安卓语音识别赢得';I don’我不在另一个班工作,java,android,adapter,speech-recognition,text-to-speech,Java,Android,Adapter,Speech Recognition,Text To Speech,我是Android开发的初学者。我试图创建的是一个应用程序,它与您交谈,然后等待您的回答,这样它的文本到语音工作,然后它激活语音识别,用我的代码,文本到语音工作,然后它调用语音识别。然后显示错误消息,执行捕获块。 问题是我必须在单独的类中添加语音识别,然后在Adapter not Main活动中添加语音识别的对象。语音识别不起作用,因为Android语音识别的所有教程都在主活动中添加了代码,而我在适配器中调用类来做这件事,这是问题吗 更新startActivityForResult()方法不起作
问题是我必须在单独的类中添加语音识别,然后在Adapter not Main活动中添加语音识别的对象。语音识别不起作用,因为Android语音识别的所有教程都在主活动中添加了代码,而我在适配器中调用类来做这件事,这是问题吗 更新startActivityForResult()方法不起作用
public class SpeechRecog extends Activity {
private static final int VOICE_RECOGNITION_REQUEST_CODE = 1001;
String textResult ;
public void Start (Intent i , Context c){
i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
i.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US");
i.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1);
i.putExtra(RecognizerIntent.EXTRA_PROMPT, "Are You Done , yet? ");
try{
startActivityForResult(i,VOICE_RECOGNITION_REQUEST_CODE);
} catch(Exception e) {
Toast.makeText(c, "SpeechRecogntion is not avalible on your device ", Toast.LENGTH_LONG).show();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if ((requestCode == VOICE_RECOGNITION_REQUEST_CODE)&& (resultCode== RESULT_OK)) {
textResult= data.getStringExtra(RecognizerIntent.EXTRA_RESULTS);
if (checkResult())
Toast.makeText(getApplicationContext(), "You are done ", Toast.LENGTH_LONG).show();
else
Toast.makeText(getApplicationContext(), "You are not done ", Toast.LENGTH_LONG).show();
}
super.onActivityResult(requestCode, resultCode, data);
}
private boolean checkResult() {
if (textResult.equals("done")||(textResult.equals("yes")))
return true ;
return false;
}
}
这是演讲类的代码
public class SpeechRecog extends Activity {
private static final int VOICE_RECOGNITION_REQUEST_CODE = 1001;
String textResult ;
public void Start (Intent i , Context c){
i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
i.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US");
i.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1);
i.putExtra(RecognizerIntent.EXTRA_PROMPT, "Are You Done , yet? ");
try{
startActivityForResult(i,VOICE_RECOGNITION_REQUEST_CODE);
} catch(Exception e) {
Toast.makeText(c, "SpeechRecogntion is not avalible on your device ", Toast.LENGTH_LONG).show();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if ((requestCode == VOICE_RECOGNITION_REQUEST_CODE)&& (resultCode== RESULT_OK)) {
textResult= data.getStringExtra(RecognizerIntent.EXTRA_RESULTS);
if (checkResult())
Toast.makeText(getApplicationContext(), "You are done ", Toast.LENGTH_LONG).show();
else
Toast.makeText(getApplicationContext(), "You are not done ", Toast.LENGTH_LONG).show();
}
super.onActivityResult(requestCode, resultCode, data);
}
private boolean checkResult() {
if (textResult.equals("done")||(textResult.equals("yes")))
return true ;
return false;
}
}
这是Adapter类中的对象
private SpeechRecog mySP;
private Intent mySpIntetn ;
public ListAdapterClass(Context context) {
mytts = new TxtToSpeechClass(context);
mySP = new SpeechRecog();
}
这就是我的问题所在,Adapter类中的clicklistener
Lh.btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v)
{
if (Lh.btn.getText().equals("Play"))
{
Lh.btn.setText("Pause"); //change the btn status so user know how to stop it
List<Items> hResults=db.getAllItems(Lh.idList + 1);
for (int i = 0; i < hResults.size(); i++)
{
Items item = hResults.get(i);
String s = item.getItemname();
mytts.Talk(s,1);
mySP.Start(mySpIntetn , context ); //the code in here wont work is there something I'm missing here
Toast.makeText(context,s, Toast.LENGTH_SHORT).show();
}
mytts.Talk("Congrats ",1);// 1 means Queue_add
} else {
Lh.btn.setText("Play");
mytts.Talk("See you later", 0); // 0 means Queue_Flush
}
}
);
Lh.btn.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v)
{
if(Lh.btn.getText().equals(“Play”))
{
Lh.btn.setText(“暂停”);//更改btn状态,以便用户知道如何停止它
List hResults=db.getAllItems(Lh.idList+1);
对于(int i=0;i
mySpIntetn
是私有的。请尝试在适配器类中将其更改为public。什么不起作用?语音识别不起作用..startActivityForResult()对于语音识别显示错误,您能检查一下吗?LogCat怎么说?致命异常:位于com.example.vozapplication.SpeechRecog.Start(SpeechRecog.java:24)E/AndroidRuntime(413)的main java.lang.NullPointerException位于android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:101):在com.example.vozapplication.ListAdapterClass$1.onClick(ListAdapterClass.java:117)SpeechRecog(活动)。startActivityForResult(意图,int,Bundle)行:3446 SpeechRecog(活动)。startActivityForResult(意图,int)行:3407 SpeechRecog.Start(意图,上下文)第24行SpeechRecog.java中的第24行是什么?NPE堆栈跟踪似乎与您共享的代码不匹配。我正在使用GetApplicationContext(),现在我将其传递给Start()方法。这使我的应用程序工作,但SR仍然不工作。startActivityForResult(I,语音识别\请求\代码)中存在问题;它总是显示我输入Try catch的错误消息