permission 문제로 Audio Record 시 무한 에러 발생
houndify 를 이용해서 audio record 하는 코드를 작성하는데, 언젠가부터 audio record 에서 무한히 에러가 발생했다 :
(1) 안드로이드에 익숙치 않고, (2) 오디오 레코드 처리를 JNI 코드에서 수행하기 때문에 IDE에서도 별다른 warning 을 주지 않았기 때문에 이런 삽질을 하게 된 것.
Main Activity 에 다음과 같이 처리하는 코드를 넣어두니 당장 동작은 하게 되었다. 사실 코드가 Service 에 있어 처리 방법을 좀더 고민해 봐야 하는데 진도가 급하므로 일단 이정도로 만족.
03-20 11:11:45.209 27421-27525/com.alticast.mmux V/AudioByteStreamSource: manufacturer = samsung, model = SM-G920S
03-20 11:11:45.219 27421-27525/com.alticast.mmux E/AudioRecord: AudioFlinger could not create record track, status: -1
03-20 11:11:45.229 27421-27525/com.alticast.mmux E/AudioRecord-JNI: Error creating AudioRecord instance: initialization check failed with status -1.
03-20 11:11:45.229 27421-27525/com.alticast.mmux E/android.media.AudioRecord: Error code -20 when initializing native AudioRecord object.
03-20 11:11:45.229 27421-27525/com.alticast.mmux E/audio_debug: AudioRecordFactory failed to create new instance
하루를 날려가며 삽질한 끝에 원인을 알았는데, Android 6.0 (API level 23) 부터는 런타임에 dangerous permission 을 사용하려면 사용자 UI 를 통한 명시적 허가를 받아야 하는데 이에 대한 처리가 되어있지 않아서였다.(1) 안드로이드에 익숙치 않고, (2) 오디오 레코드 처리를 JNI 코드에서 수행하기 때문에 IDE에서도 별다른 warning 을 주지 않았기 때문에 이런 삽질을 하게 된 것.
Main Activity 에 다음과 같이 처리하는 코드를 넣어두니 당장 동작은 하게 되었다. 사실 코드가 Service 에 있어 처리 방법을 좀더 고민해 봐야 하는데 진도가 급하므로 일단 이정도로 만족.
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.RECORD_AUDIO},
100);
}
댓글
댓글 쓰기