我在非活动类中启动语音识别活动(通过传入活动)这里是代码:
private static void startVoiceRecognitionActivity() {
// TODO Auto-generated method stub
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
"Talk");
myActivity.startActivityForResult(intent, REQUEST_CODE);
}
最后一行myActivity
是我传入此类方法的类的活动。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
for (final EditText editText : editTextHandlingList) {
if (requestCode == REQUEST_CODE && resultCode == theActivity.RESULT_OK) {
ArrayList<String> results = data
.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
//log the result }
}
}
现在问题是onActivityResult
方法。我希望能够将结果返回到同一个类中,而不是在活动中。
如果它含糊不清,请问我问题..
当我将活动传递给这个班级时,有什么方法可以做到这一点吗?应该有办法解决这个问题。 如果您有任何疑问,请问我。
答案 0 :(得分:0)
I want to be able to get the result back inside the same class and not
in the activity.
没有办法,你真的无法在不执行你的活动的情况下得到结果,因为当其他活动结束时startActivityForResult
与你的活动有关。
<强>溶液强>
由于您在另一个班级中拥有myActivity
,因此您可以使用其中的Intent
来获取您班级中启动VoiceRecognition
的其他活动的结果。还要确保在VoiceRecognition
活动结束后调用它。
<强>样品:强>
myActivity.getIntent().getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
答案 1 :(得分:0)
如果我理解这个问题,你就是想做这样的事情:
有时创建一个封装自定义代码的实用程序类很有用(在本例中是与语音相关的)。实用程序类只是一堆static
方法:
public static class VoiceRecognitionUtils {
private static void startVoiceRecognitionActivity(Activity myActivity) {
// TODO Auto-generated method stub
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
"Talk");
myActivity.startActivityForResult(intent, REQUEST_CODE);
}
private static void processResult(int requestCode, int resultCode, Intent data) {
for (final EditText editText : editTextHandlingList) {
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
ArrayList<String> results = data
.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
}
}
}
}
鉴于该类,您的活动可以从适当的生命周期事件中调用静态方法:
public class MainActivity extends FragmentActivity {
// ...
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
VoiceRecognitionUtils.processResult(requestCode, resultCode, data);
}
// call startVoiceRecognitionActivity() somewhere
}
语音识别仍在启动,Activity
收到的结果(因为Android操作系统要求),但技术细节收集在实用程序类中。
我不确定你的问题是否是你想要做的,但无论如何我会推荐这种技术,它非常有用。