Android 開發(fā)系統(tǒng)自帶語音模塊應(yīng)用
需求:項(xiàng)目中需要添加語音搜索模塊,增加用戶體驗(yàn)
解決過程:在網(wǎng)上搜到語音搜索例子,參考網(wǎng)上代碼,加入到了自己的項(xiàng)目,完成產(chǎn)品要求。這個問題很好解決,網(wǎng)上能找到很多的資料,但是沒有直接導(dǎo)入工程就能用的例子,我這里寫了一個完整的Demo,代碼可以直接粘貼到自己項(xiàng)目中去,實(shí)現(xiàn)了
語音搜索,并將搜索結(jié)果展示。
語音搜索大致流程:啟動系統(tǒng)自帶的Intent,Intent參數(shù)設(shè)置為RecognizerIntent.ACTION_RECOGNIZE_SPEECH,再加上一些提示參數(shù)
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "請開始說話");
當(dāng)完成語音搜索之后在onActivityResult里進(jìn)行數(shù)據(jù)接收,我這里只是展示了語音搜索的第一個結(jié)果,系統(tǒng)提供的結(jié)果有很多,是根據(jù)相似度排列的。我在Demo里使用了handler,在handler里把數(shù)據(jù)展示了出來。項(xiàng)目中這種情況下,對數(shù)據(jù)的一些處理都是在handler中進(jìn)行。開發(fā)的過程中遇到一些語音搜索崩潰的現(xiàn)象,最后發(fā)現(xiàn)在結(jié)果展示的時候不要做一些費(fèi)時的操作。
代碼如下
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("您的手機(jī)暫不支持語音搜索功能,點(diǎn)擊確定下載安裝Google語音搜索軟件。您也可以在各應(yīng)用商店搜索“語音搜索”進(jìn)行下載安裝。"); builder.setPositiveButton("確定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 跳轉(zhuǎn)到下載語音網(wǎng)頁 } }); 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); } } } }
以上就是對Android 語音模塊開發(fā)的一個小實(shí)例,有需要的朋友可以參考下。
相關(guān)文章
Android實(shí)現(xiàn)截屏方式整理(總結(jié))
本篇文章主要介紹了Android 截屏方式整理(總結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07Android通過滑動實(shí)現(xiàn)Activity跳轉(zhuǎn)(手勢識別器應(yīng)用)
這篇文章主要為大家詳細(xì)介紹了Android通過滑動實(shí)現(xiàn)Activity跳轉(zhuǎn),,講解手勢識別器應(yīng)用,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05Android開發(fā)教程之調(diào)用攝像頭功能的方法詳解
這篇文章主要介紹了Android調(diào)用攝像頭功能的方法,詳細(xì)分析了Android調(diào)用攝像頭功能的權(quán)限設(shè)置、功能代碼與實(shí)現(xiàn)步驟,需要的朋友可以參考下2016-06-06Android自定義View實(shí)現(xiàn)雪花特效
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)雪花特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-02-02android ViewPager實(shí)現(xiàn)自動無限輪播和下方向?qū)A點(diǎn)
本篇文章主要介紹了android ViewPager實(shí)現(xiàn)自動輪播和下方向?qū)A點(diǎn),具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-02-02Android中如何實(shí)現(xiàn)清空搜索框的文字
本文主要介紹Android中實(shí)現(xiàn)清空搜索框的文字的方法。項(xiàng)目中的有關(guān)搜索的地方,加上清空文字的功能,目的是為了增加用戶體驗(yàn),使用戶刪除文本更加快捷。需要的朋友一起來看下吧2016-12-12android BitmapFactory.Options使用方法詳解
這篇文章主要為大家詳細(xì)介紹了android BitmapFactory.Options使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01