2015-12-22 3 views
1

У меня есть программа, которая успешно работает на полдюжины тестовых устройств и сотни, по-видимому, счастливых пользователей, которые загружают мое приложение из Google Play.Инициализация AudioRecorder на Nexus 7 Marshmallow

Я купил использованный Nexus 7, который был обновлен до Marshmallow, и я не могу записать. Устройство работает с другими приложениями для записи звука просто отлично, но просто не запускает мое приложение.

Вот код:

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. Есть ли что-то новое и необычное о Зефир? Должен ли я подозревать некоторый сбой в моем оборудовании? Что происходит?

ответ

3

В Android 6.0 Marshmallow был введен новый способ работы с разрешениями.

Теперь некоторые разрешения должны быть заданы во время выполнения, и пользователь может выбрать, разрешить или нет.

Check this link for more information

+1

Почему * piep * не это сказал где-нибудь ... мне потребовалось день^_^ – DipSwitch

+0

@DipSwitch, она есть, но не везде. В Android 6 было много сказано о новой системе разрешений, но не везде. – geNia

Смежные вопросы