2016-06-09 33 views
0

的錯誤來這裏:由於Android 6.0 Audiorecord問題

 mAudioRecord.startRecording(); 

檢查代碼:

private static int[] mSampleRates = new int[]{44100, 22050, 11025, 8000}; 

public AudioRecord findAudioRecord() { 
    for (int rate : mSampleRates) { 
     for (short audioFormat : new short[]{AudioFormat.ENCODING_PCM_8BIT, AudioFormat.ENCODING_PCM_16BIT}) { 
      for (short channelConfig : new short[]{AudioFormat.CHANNEL_IN_MONO, AudioFormat.CHANNEL_IN_STEREO}) { 
       try { 
        Log.d(TAG, "Attempting rate " + rate + "Hz, bits: " + audioFormat + ", channel: " + channelConfig); 
        int bufferSize = AudioRecord.getMinBufferSize(rate, channelConfig, audioFormat); 

        if (bufferSize != AudioRecord.ERROR_BAD_VALUE) { 
         // check if we can instantiate and have a success 
         AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, rate, channelConfig, audioFormat, bufferSize); 

         if (recorder.getState() == AudioRecord.STATE_INITIALIZED) { 
          return recorder; 
         } 
        } 
       } catch (Exception e) { 
        Log.e(TAG, rate + "Exception, keep trying.", e); 
       } 
      } 
     } 
    } 
    return null; 
} 

的Errror:

05-27 16:44:16.371 16055-16254/modseven.shutup E/AudioRecord: AudioFlinger could not create record track, status: -1 
05-27 16:44:16.381 16055-16254/modseven.shutup E/AudioRecord-JNI: Error creating AudioRecord instance: initialization check failed with status -1. 
05-27 16:44:16.381 16055-16254/modseven.shutup E/android.media.AudioRecord: Error code -20 when initializing native AudioRecord object. 
05-27 16:44:16.381 16055-16254/modseven.shutup E/AndroidRuntime: FATAL EXCEPTION: Thread-1320 
                   Process: modseven.shutup, PID: 16055 
                   java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord. 
                    at android.media.AudioRecord.startRecording(AudioRecord.java:943) 
                    at modseven.shutup.AudioRecorder$3.run(AudioRecorder.java:67) 
                    at java.lang.Thread.run(Thread.java:818) 

這似乎是由於Android 6.0。

我無法設法讓它工作了。它工作過! 我'也是用這個:

<uses-permission android:name="android.permission.RECORD_AUDIO"/> 

我沒有改變的代碼什麼。它剛剛停止工作! 有什麼建議嗎?想法?

回答

2

上Api23錄音被認爲是一個「危險的權限」,並要求獲得許可在運行時:

<!-- Allows an application to record audio. 
    <p>Protection level: dangerous 
--> 
<permission android:name="android.permission.RECORD_AUDIO" 
    android:permissionGroup="android.permission-group.MICROPHONE" 
    android:label="@string/permlab_recordAudio" 
    android:description="@string/permdesc_recordAudio" 
    android:protectionLevel="dangerous"/> 

來源:https://github.com/android/platform_frameworks_base/blob/master/core/res/AndroidManifest.xml

看看這裏,並按照如何請求權限,可以在運行時:

https://developer.android.com/training/permissions/requesting.html

或者它應該工作,如果你的目標阿比等級22當你建立你的項目。

+0

完美!謝謝! – MindCode