现在的位置: 首页 > 综合 > 正文

android开发中系统自带语音模块的使用

2013年10月04日 ⁄ 综合 ⁄ 共 2388字 ⁄ 字号 评论关闭

需求:项目中需要添加语音搜索模块,增加用户体验

解决过程:在网上搜到语音搜索例子,参考网上代码,加入到了自己的项目,完成产品要求。这个问题很好解决,网上能找到很多的资料,但是没有直接导入工程就能用的例子,我这里写了一个完整的Demo,代码可以直接粘贴到自己项目中去,实现了语音搜索,并将搜索结果展示。

语音搜索大致流程:启动系统自带的Intent,Intent参数设置为RecognizerIntent.ACTION_RECOGNIZE_SPEECH,再加上一些提示参数

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "请开始说话");

当完成语音搜索之后在onActivityResult里进行数据接收,我这里只是展示了语音搜索的第一个结果,系统提供的结果有很多,是根据相似度排列的。我在Demo里使用了handler,在handler里把数据展示了出来。项目中这种情况下,对数据的一些处理都是在handler中进行。开发的过程中遇到一些语音搜索崩溃的现象,最后发现在结果展示的时候不要做一些费时的操作。

代码如下

public class MainActivity extends Activity {
	private Button btnVoice;
	private TextView tvVoiceResult;
	private static final int VOICE_RECOGNITION_REQUEST_CODE = 123456;
	
	private Handler jumpHandler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			tvVoiceResult.setText((String)msg.obj);
		};
	};
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnVoice = (Button) findViewById(R.id.btnVoice);
        tvVoiceResult = (TextView) findViewById(R.id.tvVoiceResult);
        btnVoice.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				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, "请开始说话");
			        startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
				}catch(ActivityNotFoundException e) {
					AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
					builder.setTitle("语音识别");
					builder.setMessage("您的手机暂不支持语音搜索功能,点击确定下载安装Google语音搜索软件。您也可以在各应用商店搜索“语音搜索”进行下载安装。");
					builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {
//							跳转到下载语音网页
						}
					});
					builder.setNegativeButton("取消", null);
					builder.show();
				}
			}
		});
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    	super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == MainActivity.RESULT_OK) {
        	ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
        	if(matches.size() > 0) {
	        	Message msg = new Message();
	        	msg.obj = matches.get(0);
	        	jumpHandler.sendMessage(msg);
        	}
        }
    }
    
}

Demo下载地址



抱歉!评论已关闭.