2016-06-09 62 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