在Nexus 7 Marshmallow上初始化AudioRecorder

时间:2015-12-22 16:37:57

标签: android android-6.0-marshmallow audiorecord

我有一个程序已经在六个测试设备上成功运行,还有数百个显然很开心的用户从Google Play下载我的应用程序。

我买了一个已经升级到Marshmallow的二手Nexus 7,我无法记录。该设备运行其他录音应用程序就好了,但它只是赢得了我的应用程序。

这里有一些代码:

private static AudioRecord recorder = null;

public static void record() throws IllegalArgumentException
{
    int channelConfig = AudioFormat.CHANNEL_IN_MONO;
    int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
    int sampleRate = 44100;
    int minSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat );
    int latencySize = 3584;
    int inputBufferSize = Math.max( minSize, latencySize );
    recorder = new AudioRecord( MediaRecorder.AudioSource.DEFAULT, sampleRate, channelConfig, audioFormat, inputBufferSize );
    int state = recorder.getState();
    if ( state != AudioRecord.STATE_INITIALIZED )
    {
        if ( recorder != null )
            recorder.release();
        recorder = null;
        throw new IllegalArgumentException( "Failed to initialize Audio recorder.  State = " + state );
    }
    recorder.startRecording();
    Thread inputThread = new Thread( new Runnable() { public void run() { inputTask(); } }, "Input" );
    inputThread.setPriority( Thread.MAX_PRIORITY );
    inputThread.start();
}

状态0失败,与STATE_UNINITIALIZED相同。

我的AndroidManifest.xml包含

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

正如我所说,这个代码在数百台其他机器上成功运行,它在我的Nexus 7上失败了。有没有关于Marshmallow的新的和不同的东西?我应该怀疑我的硬件有些故障吗?发生了什么事?

1 个答案:

答案 0 :(得分:3)

在Android 6.0 Marshmallow中,已经引入了一种使用权限的新方法。

现在应该在运行时询问一些权限,用户可以选择,允许或不允许。

Check this link for more information