# 在AngularJS應用中集成科大訊飛語音輸入功能
**[注:請點擊此處進行充電!](http://blog.csdn.net/sunhuaqiang1/article/details/50188605)**
### 前言
根據項目需求,需要在首頁搜索框中添加語音輸入功能,考慮到科大訊飛語音業務的強大能力,遂決定使用科大訊飛語音輸入第三方服務。軟件首頁截圖如下所示:
?
涉及的源代碼如下所示:
~~~
<button ng-click="startRecognize()">
<i class="icon ion-mic-a " ></i>
</button>
//語音識別
$rootScope.startRecognize = function() {
var speech;
var options = {}; //語音識別參數,用于控制語音引擎的各種技術參數
options.engine = 'iFly';
options.userInterface = 'false';
text = "";
plus.speech.startRecognize(options, function(s) {
text += s;
console.log(text);
text = text.replace(',', '').replace('。', '').replace('?', '');
$scope.$apply(function() {
$rootScope.medname= text;
$scope.searchMed(2, $rootScope.medname)
});
}, function(e) {
$ionicLoading.show({
template: "語音輸入失敗,請重新嘗試"
});
setTimeout(function() {
$ionicLoading.hide();
}, 2000);
});
setTimeout(function() {
plus.speech.stopRecognize();
}, 10000); //超時語音結束
}
~~~
其中涉及到使用ionic框架中的按鈕組件。
其云端打包授權功能需要到第三方開發平臺申請應用后獲取相關配置參數。集成過程與微信授權認證差不多。
### 添加第三方登錄模塊
### 可視化界面配置
首先是需要添加第三方登錄模塊,雙擊應用的manifest.json文件:

切換到“模塊權限配置”項,在“未選模塊”中選擇“Speech(語音輸入)”添加到“已選模塊”:

### 代碼視圖配置
切換到“代碼視圖”項,在permissions節點下添加如下Speech節點數據:
"Speech":?{"description":?"語音輸入"}
效果如下所示:
?
????????
(說明:點擊“語音輸入按鈕”后,彈出錄音識別界面,在說出“感冒”一詞后將識別出的文字填充在輸入欄中,同時搜索相關藥品,搜索結果如上圖右所示。)
### 優化
優化點主要存在兩個地方:
1.icon圖標過于丑陋
2.將語音輸入icon集成進input輸入欄,如下圖所示(UC?Browser):

3.存在版本兼容問題。有些手機不支持此插件。
首先第一個問題屬于美工干的活。但自己似乎應該給其預留出應有的填補空間才對。優化后的效果如下圖所示(感覺還是很丑):

第二個問題,解決起來似乎有一定的難度。自己只能夠慢慢摸索。
第三個問題暫時得不到解決。
### 附:button設置圖片
~~~
<button style="width:40px; height:38px; white-space: normal; padding:12px; padding-left:20px; background:none; background: url(img/btnbg.png) no-repeat -2px -2px;" ng-click="startRecognize()">
<!--<i class="icon ion-mic-a " ></i>-->
</button>
~~~
### 參考文獻:
[http://www.runoob.com/ionic/ionic-icon.html](http://www.runoob.com/ionic/ionic-icon.html)
[http://www.html5plus.org/doc/zh_cn/audio.html](http://www.html5plus.org/doc/zh_cn/audio.html)
[http://www.html5plus.org/doc/zh_cn/speech.html#plus.speech.SpeechRecognizeOption](http://www.html5plus.org/doc/zh_cn/speech.html#plus.speech.SpeechRecognizeOption)
?
?
?
?
?
- 前言
- (一)深入理解ANGULARUI路由_UI-ROUTER
- (二)AngularJS路由問題解決
- (四)ANGULAR.JS實現下拉菜單單選
- (五)Angular實現下拉菜單多選
- (六)AngularJS+BootStrap實現彈出對話框
- (七)實現根據不同條件顯示不同控件
- (十)AngularJS改變元素顯示狀態
- (十四)AngularJS靈異代碼事件
- (十七)在AngularJS應用中實現微信認證授權遇到的坑
- (十八)在AngularJS應用中集成科大訊飛語音輸入功能
- (十九)在AngularJS應用中集成百度地圖實現定位功能
- (二十一)Angularjs中scope與rootscope區別及聯系
- (二十三)ANGULAR三宗罪之版本陷阱
- (二十四)AngularJS與單選框及多選框的雙向動態綁定
- (二十五)JS實現導入文件功能
- (二十七)實現二維碼信息的集成思路
- (二十八)解決AngualrJS頁面刷新導致異常顯示問題
- (二十九)AngularJS項目開發技巧之localStorage存儲
- (三十)AngularJS項目開發技巧之圖片預加載
- (三十一)AngularJS項目開發技巧之獲取模態對話框中的組件ID
- (三十二)書海拾貝之特殊的ng-src和ng-href
- (三十三)書海拾貝之簡介AngularJS中使用factory和service的方法
- (三十四)Angular數據更新不及時問題探討
- (三十六)AngularJS項目開發技巧之利用Service&Promise&Resolve解決圖片預加載問題(后記)