2

TL; DR:它沒有工作的原因是因爲我在Android 6.0上運行應用程序。在6.0中,您必須手動授予應用程序訪問麥克風的權限。Ionic Cordova macdonst SpeechRecognition無法啓動?

原帖: 我想創建一個使用從 https://github.com/macdonst/SpeechRecognitionPlugin

的語音識別離子應用程序,但它somehoe不工作?

起初,我創建了一個離子項目:

ionic start cordova-speech blank 

我走進新的文件夾,下載插件:

cordova plugin add https://github.com/macdonst/SpeechRecognitionPlugin 

我加入了Android平臺。

我的HTML文件:

<body ng-app="starter"> 
    <ion-pane ng-controller="AppCtrl">   
     <ion-content class="padding">  
     <button class="button button-full button-positive" ng-click="record()"> 
      Record 
     </button> 
     <div class="card"> 
      <div class="item item-text-wrap"> 
      {{recognizedText}} 
      </div> 
     </div> 
     </ion-content> 
    </ion-pane> 
</body> 

我app.js文件:

angular.module('starter', ['ionic']) 

.controller('AppCtrl', function($scope) { 
    $scope.recognizedText = ''; 

    $scope.record = function() { 
    alert("step1"); 

    var recognition = new SpeechRecognition(); 
    alert("step2"); 

    recognition.onresult = function(event) { 
     alert("step3"); 

     if (event.results.length > 0) { 
      $scope.recognizedText = event.results[0][0].transcript; 
      $scope.$apply(); 
     } 
    }; 
    recognition.start(); 
    alert("step4"); 

    }; 
}); 

我加了一些警告到代碼,以調試(無法調試,在瀏覽器的功能) 。當我按下錄製按鈕時,它只會彈出第一個和第二個警報。這個問題似乎與onresult有關。我錯過了什麼?

我使用的是Android 6.0

我做了一個亞行logcat。這是結果:

02-14 03:39:28.109 202 815 D audio_hw_primary: select_devices: out_snd_device(2: speaker) in_snd_device(0: none) 
02-14 03:39:28.109 202 815 D msm8974_platform: platform_send_audio_calibration: sending audio calibration for snd_device(2) acdb_id(15) 
02-14 03:39:28.109 202 815 D audio_hw_primary: enable_snd_device: snd_device(2: speaker) 
02-14 03:39:28.114 202 815 D audio_hw_primary: enable_audio_route: apply and update mixer path: low-latency-playback 
02-14 03:39:28.124 26122 26210 D OpenGLRenderer: endAllStagingAnimators on 0x985f7a00 (RippleDrawable) with handle 0x9cace320 
02-14 03:39:28.173 779 1396 W InputMethodManagerService: Window already focused, ignoring focus gain of: [email protected] attribute=null, token = [email protected] 
02-14 03:39:28.307 189 189 W SurfaceFlinger: couldn't log to binary event log: overflow. 
02-14 03:39:29.552 202 815 D audio_hw_primary: out_set_parameters: enter: usecase(1: low-latency-playback) kvpairs: routing=2 
02-14 03:39:29.560 26122 26122 I chromium: [INFO:CONSOLE(34)] "initialized", source: file:///android_asset/www/plugins/org.apache.cordova.speech.speechrecognition/www/SpeechRecognition.js (34) 
02-14 03:39:29.562 779 1389 W InputMethodManagerService: Window already focused, ignoring focus gain of: [email protected] attribute=null, token = [email protected] 
02-14 03:39:29.569 30081 30096 E RecognitionService: call for recognition service without RECORD_AUDIO permissions 
02-14 03:39:29.569 26122 26122 D SpeechRecognition: error speech 
02-14 03:39:29.570 26122 26122 W CordovaPlugin: Attempted to send a second callback for ID: SpeechRecognition494458598 
02-14 03:39:29.570 26122 26122 W CordovaPlugin: Result was: {"type":"end"} 
02-14 03:39:29.570 26122 26122 D cr_Ime : [ImeAdapter.java:213] updateKeyboardVisibility: type [0], flags [0], show [true] 
02-14 03:39:29.570 26122 26122 D cr_Ime : [AdapterInputConnection.java:178] updateState [] [0 0] [-1 -1] [true] 
02-14 03:39:29.586 202 815 D AudioFlinger: mixer(0xb4180000) throttle end: throttle time(7) 
02-14 03:39:29.747 189 189 W SurfaceFlinger: couldn't log to binary event log: overflow. 
02-14 03:39:30.796 910 31147 D NotificationMonitor: onNotificationPosted :StatusBarNotification(pkg=com.qihoo.security user=UserHandle{0} id=277 tag=null score=20 key=0|com.qihoo.security|277|null|10720: Notification(pri=2 contentView=com.qihoo.security/0x7f0300d4 vibrate=null sound=null tick defaults=0x0 flags=0x2 color=0x00000000 sortKey=sort_key_00 vis=PRIVATE)) 
02-14 03:39:30.903 910 31147 D NotificationMonitor: return, onNotificationPosted OWN_PKG_NAME 
02-14 03:39:32.721 202 815 D audio_hw_primary: disable_audio_route: reset and update mixer path: low-latency-playback 
02-14 03:39:32.721 202 815 D audio_hw_primary: disable_snd_device: snd_device(2: speaker) 

UPDATE: 我安裝

cordova plugin add cordova-plugin-chrome-apps-audiocapture --save 
ordova plugin add org.apache.cordova.media 

有人說我應該刪除

<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
從我的語音識別和科爾多瓦媒體插件

,但它不」也沒有幫助。它現在執行第四條警報,但跳過警報3,這意味着onresult功能仍然存在問題。

回答

1

這條線在日誌中:

02-14 03:39:29.569 30081 30096 E RecognitionService: call for recognition service without RECORD_AUDIO permissions 

告訴你需要設置權限來記錄您的應用程序的音頻。你可以描述here添加插件org.apache.cordova.media

cordova plugin add org.apache.cordova.media 

+0

不,它沒有幫助。請參閱更新 – thadeuszlay

+0

在Android 6.0中,用戶必須分別在應用程序頁面中確認錄製權限。 –

+0

啊......謝謝! :) – thadeuszlay