title: Android Speech Recognition Insufficient Permission (Error Code 9)
body: <p>I am trying to implement speech recognition without the standard dialog (it is working fine with the dialog).</p>
  
  <p>I am getting error code 9 as soon as I try to start listening.</p>
  
  <p>My device is an LG G Stylo (running Android 6.0).</p>
  
  <p>Manifest:</p>
  
  <pre><code>&lt;manifest package="example.com.myapplication"
        xmlns:android="http://schemas.android.com/apk/res/android"&gt;
  &lt;uses-permission android:name="android.permission.RECORD_AUDIO"/&gt;
  &lt;application
   .....
  </code></pre>
  
  <p>(also tried adding INTERNET permission even though that shouldn't be necessary since offline recognition should be working)</p>
  
  <p>build.gradle:</p>
  
  <pre><code>compileSdkVersion 23
  buildToolsVersion "23.0.2"
  
  defaultConfig {
      applicationId "example.com.appname"
      minSdkVersion 19
      targetSdkVersion 23
      versionCode 1
      versionName "1.0"
  }
  </code></pre>
  
  <p>Speech recognition code:</p>
  
  <pre><code>private SpeechRecognizer speechRecognizer;
  
  protected void onCreate(Bundle savedInstanceState) {
    speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
    speechRecognizer.setRecognitionListener(new speech_listener());
    Intent intent = new intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
       RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
         getApplication().getPackageName());
    intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.ENGLISH);
    speechRecognizer.startListening(intent);
  </code></pre>
  
  <p>Listener (inner) class:</p>
  
  <pre><code>class speech_listener implements RecognitionListener
  {
    public void onReadyForSpeech(Bundle params){}
    public void onBeginningOfSpeech(){}
    public void onRmsChanged(float rmsdB){}
    public void onBufferReceived(byte[] buffer){}
    public void onEndOfSpeech(){}
    public void onError(int error){
      Log.d("Speech", "error: " + error);
    }
    public void onResults(Bundle results)
    {
      ArrayList data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
      String answer = (String)data.get(0);
      processAnswer(answer);
    }
    public void onPartialResults(Bundle partialResults){}
    public void onEvent(int eventType, Bundle params){}
  }
  </code></pre>
  
  <p>Any insight would be appreciated.</p>