Ionic Cordova macdonst SpeechRecognition won't start?
<p><strong>TL; DR:</strong> The reason why it didn't work was because I was running the app on Android 6.0. In 6.0 you have to manually grant the application the permission to access the microphone.</p>

<p><strong>Original post:</strong>
I wanted to create an ionic app that uses the speechRecognition from 
<a href="https://github.com/macdonst/SpeechRecognitionPlugin" rel="nofollow">https://github.com/macdonst/SpeechRecognitionPlugin</a></p>

<p>But somehoe it doesn't work?</p>

<p>At first I created an ionic project:</p>

<pre><code>ionic start cordova-speech blank
</code></pre>

<p>I went into that new folder and downloaded the plugin:</p>

<pre><code>cordova plugin add https://github.com/macdonst/SpeechRecognitionPlugin
</code></pre>

<p>I then added the android platform.</p>

<p>My HTML file:</p>

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

<p>My app.js file:</p>

<pre><code>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 &gt; 0) {
            $scope.recognizedText = event.results[0][0].transcript;
            $scope.$apply();
        }
    };
    recognition.start();
    alert("step4");

  };
});
</code></pre>

<p>I added some alerts into the code in order to debug (can't debug that feature in the browser). When I press the record button it would only pop up the first and second alert. The issue seems to be with onresult. What did I miss?</p>

<p>I'm using Android 6.0</p>

<p>I did an adb logcat. This is the result:</p>

<pre><code>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: com.android.internal.view.IInputMethodClient$Stub$Proxy@eaa7e51 attribute=null, token = android.os.BinderProxy@f80d5f9
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: com.android.internal.view.IInputMethodClient$Stub$Proxy@7dff324 attribute=null, token = android.os.BinderProxy@f80d5f9
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)
</code></pre>

<p><strong>UPDATE:</strong>
I installed </p>

<pre><code>cordova plugin add cordova-plugin-chrome-apps-audiocapture --save
ordova plugin add org.apache.cordova.media
</code></pre>

<p>some said I should remove the </p>

<pre><code>&lt;uses-permission android:name="android.permission.RECORD_AUDIO" /&gt;
</code></pre>

<p>from my speechrecognition and cordova media plugins but it doesn't help either. It now executes the 4th alert but skips alert 3, meaning there is still an issue with the onresult function.</p>