android内置了语音识别包,我们可以通过语音识别包设置我们自己的语音识别程序,识别率还不错,嘿嘿,至少我说的,95%能准确识别,依样画葫芦,具体的代码还不是很懂,做个文章,以后查起来也方便
前期准备,包括确认系统是否有安装语音识别包等,上代码
PackageManager pgm = getPackageManager();
List<ResolveInfo> activities = pgm.queryIntentActivities(
new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
if(activities.size() != 0){
try{
/*语音识别intent*/
intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
//在识别画面出现的说明
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "语音识别");
//intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 10);
startActivityForResult(intent,VOICE_RECOGNITION_REQUEST_CODE);
}catch(Exception e){}
}else{
Toast.makeText(this,"没有安装语音识别包",Toast.LENGTH_SHORT).show();
}
上面的VOICE_RECOGNITION_REQUEST_CODE是定义的一个标志
private static final int VOICE_RECOGNITION_REQUEST_CODE = 0x1008;
到这里startActivityForResult之后,下来的事情就交给内置的语音识别程序做了,我们只需要等待并且分析识别结果就可以了。
结果分析:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
switch(requestCode){
case VOICE_RECOGNITION_REQUEST_CODE:
if(resultCode == RESULT_OK){
String strRec = null;
ArrayList<String> results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
final String[] resultsArray = new String[results.size()];
results.toArray(resultsArray);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("请选择识别结果")
.setItems(resultsArray, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
etInput.setText(resultsArray[which]);
}
})
.create().show();
}else{
Toast.makeText(this, "识别出错", Toast.LENGTH_SHORT).show();
}
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
核心部分就是这么一句:
ArrayList<String> results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
返回了识别结果,我们要干的事情,就是把结果按字串分开,然后通过我们的方式发送到屏幕上就OK