Ответ 1
Добавить разрешение record_audio в AndroidManifest.xml
<uses-permission android:name="android.permission.RECORD_AUDIO" />
public class AudioRecorderActivity extends Activity {
private static final int RECORDER_SAMPLERATE = 8000;
private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO;
private static final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT;
private AudioRecord recorder = null;
private static final String TAG = "AudioRecorderActivity";
short[][] buffers = new short[256][160];
int ix = 0;
private boolean stopped = false;
private void startRecording() {
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
try {
int N = AudioRecord.getMinBufferSize (
RECORDER_SAMPLERATE,
RECORDER_CHANNELS,
RECORDER_AUDIO_ENCODING) * 20;
recorder = new AudioRecord(AudioSource.MIC,
RECORDER_SAMPLERATE,
RECORDER_CHANNELS,
RECORDER_AUDIO_ENCODING,N );
recorder.startRecording();
while(!stopped) {
short[] buffer = buffers[ix++ % buffers.length];
N = recorder.read(buffer,0,buffer.length);
}
}
catch(Throwable x) {
Log.v(TAG,"Error reading voice audio",x);
x.printStackTrace();
}
finally {
stopped = true;
stopRecording();
}
}
}
Вопрос: Хотя фрагмент кода основан на exaple из StackOverflow, он не работает Пожалуйста, дайте мне знать, что может быть ошибкой?
12-20 03:44:32.271: E/AudioRecord(224): AudioFlinger could not create record track, status: -1
12-20 03:44:32.271: E/AudioRecord-JNI(224): Error creating AudioRecord instance: initialization check failed.
12-20 03:44:32.271: E/AudioRecord-Java(224): [ android.media.AudioRecord ] Error code -20 when initializing native AudioRecord object.
Добавить разрешение record_audio в AndroidManifest.xml
<uses-permission android:name="android.permission.RECORD_AUDIO" />
В последних версиях Android кажется, что перенастройка apk из Android Studio после изменения разрешений в манифесте фактически не изменяет разрешения в настройках приложения. Вот почему приведенный выше ответ сработал у меня. Я создал приложение без разрешения RECORD_AUDIO в своем манифесте и увидел ошибку разрешения в моем журнале (вместе с ошибками в OP). Я добавил разрешение на мой манифест и перезапустил приложение на устройстве, ошибка разрешения в журнале больше не была, но я все еще получил ошибки в OP. Я пошел в свою систему, приложения, диспетчер приложений → MyApp → Permissions и увидел, что Record Audio был включен, но все еще выключен. Вручную поверните это, зафиксировав его.
Я предполагаю (но не подтвердил), что, если бы я ввел правильное разрешение в мой манифест в первую очередь, это бы просто сработало для меня. Кроме того, удаление моего приложения с устройства, а затем переустановка, также может исправить, но я тоже не пробовал это.
Решение для андроидов для предварительного зелья будет таким же, как упоминалось в Olexij...
<uses-permission android:name="android.permission.RECORD_AUDIO" />
Однако, начиная с Android API 23 (Marshmallow), это считается и опасным разрешением, и вы должны запрашивать это разрешение в пределах действия, в котором он используется. Результатом этого является Дэйв. если вы объявите разрешение в манифесте, но не запрашиваете его во время выполнения (по крайней мере в первый раз), оно будет отображаться в разрешениях приложений в диспетчере приложений, но будет оставаться выключенным.
Проверка...
Решение для API 23 (Marshmallow) прост. Вы должны установить "targetSdkVersion 22" в файле bulid.gradle после получения разрешения ниже.