Error code -20 when initializing native AudioRecord object.

在Android开发中遇到使用ExtAudioRecorder录制wav文件时,在lt26i设备上初始化AudioRecord对象出现Error code -20的错误。错误日志显示初始化检查失败,且在非法状态下调用了prepare()和start()方法。尝试重启设备后问题仍然存在。通过深入研究发现原工具类存在缺陷,并进行了修复,完善了未考虑到的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


E/AudioRecord(5152): Could not get audio input for record source 1
E/AudioRecord-JNI(5152): Error creating AudioRecord instance: initialization check failed.
09-22 16:37:26.277: E/com.harlan.wavdemo.ExtAudioRecorder(2232): start() called on illegal state
09-22 16:37:31.157: E/com.harlan.wavdemo.ExtAudioRecorder(2232): prepare() method called on illegal state
09-22 16:37:31.157: E/com.harlan.wavdemo.ExtAudioRecorder(2232): start() called on illegal state

E/AudioRecord-Java(5152): [ android.media.AudioRecord ] Error code -20  when initializing native  AudioRecord object.


09-22 16:37:26.277: E/com.harlan.wavdemo.ExtAudioRecorder(2232): prepare() method called on illegal state


开发项目工程中我使用的是ExtAudioRecorder工具类来录制wav文件。

这个类在索尼l36h就正常使用,但放在lt26i上面,就会出现以上问题。

百思不得其解。

百度之,说是重启之后就好了,链接如下:

http://stackoverflow.com/questions/4342482/cannot-access-audiorecorder


可是重启之后,使用一次,还是会出现以上问题。

这可不是个好方法。

遂研究之。

吭哧吭哧研究过程%……%%¥%¥…………TU&^略过。。。。。

研究之后发现,这个ExtAudioRecorder工具类还是有缺陷的,改之。

简而言之,就是把原类中没有顾及到的情况考虑到了。

最终结果类如下:

<span style="font-family:Microsoft YaHei;font-size:18px;">package com.harlan.util;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.media.MediaRecorder.AudioSource;
import android.os.Environment;

import com.harlan.base.C;

public class WavRecorder {

	private static final String TAG = WavRecorder.class.getSimpleName();

	private final static int[] sampleRates = { 44100, 22050, 11025, 8000 };

	private static WavRecorder result ;
	
	public static WavRecorder getInstanse(Boolean recordingCompressed) {

		if(result!=null){
			return result;
		}
		
2025-07-02 20:15:21.873 2949-3506 ActivityManagerWrapper com.miui.home E getRecentTasks: mainTaskId=491 userId=0 baseIntent=Intent { act=android.intent.action.MAIN flag=270532608 cmp=ComponentInfo{com.example.test360/com.example.test360.MainActivity} } 2025-07-02 20:15:21.881 2949-3506 ActivityManagerWrapper com.miui.home E getRecentTasks: mainTaskId=491 userId=0 baseIntent=Intent { act=android.intent.action.MAIN flag=270532608 cmp=ComponentInfo{com.example.test360/com.example.test360.MainActivity} } 2025-07-02 20:15:21.938 27328-27328 FileUtils com.example.test360 E err open mi_exception_log errno=2 2025-07-02 20:15:21.938 27328-27328 FileUtils com.example.test360 E err write to mi_exception_log 2025-07-02 20:15:21.999 27328-27328 MiuiMultiWindowUtils com.example.test360 E initFreeFormResolutionArgs failed, device is elish 2025-07-02 20:15:22.076 27328-27328 FileUtils com.example.test360 E err write to mi_exception_log 2025-07-02 20:15:22.100 27328-27328 SurfaceSyncer com.example.test360 E Failed to find sync for id=0 2025-07-02 20:15:22.100 27328-27328 SurfaceSyncer com.example.test360 E Failed to find sync for id=0 2025-07-02 20:15:22.100 27328-27328 SurfaceSyncer com.example.test360 E Failed to find sync for id=0 2025-07-02 20:15:22.107 27328-27357 libEGL com.example.test360 E pre_cache appList: ,, 2025-07-02 20:15:22.120 27328-27357 LB com.example.test360 E fail to open node: No such file or directory 2025-07-02 20:15:22.140 8572-8572 BaseInputMethodService com.sohu.inputmethod.sogou.xiaomi E onStartInput app:com.example.test360 restarting:false 2025-07-02 20:15:22.149 2949-3506 ActivityManagerWrapper com.miui.home E getRecentTasks: mainTaskId=491 userId=0 baseIntent=Intent { act=android.intent.action.MAIN flag=270532608 cmp=ComponentInfo{com.example.test360/com.example.test360.MainActivity} } 2025-07-02 20:15:22.151 2949-3506 ActivityManagerWrapper com.miui.home E getRecentTasks: mainTaskId=491 userId=0 baseIntent=Intent { act=android.intent.action.MAIN flag=270532608 cmp=ComponentInfo{com.example.test360/com.example.test360.MainActivity} } 2025-07-02 20:15:22.217 27328-27380 libEGL com.example.test360 E pre_cache appList: ,, 2025-07-02 20:15:22.273 27328-27387 send_data_to_xlog com.example.test360 E send_video_play_to_xlog, start 2025-07-02 20:15:22.273 27328-27389 send_data_to_xlog com.example.test360 E send_video_play_to_xlog, start 2025-07-02 20:15:22.273 27328-27387 xlog_client com.example.test360 E xlog_open: Error in open xlog 2025-07-02 20:15:22.273 27328-27387 xlog_client com.example.test360 E xlog open fail 2025-07-02 20:15:22.273 27328-27389 xlog_client com.example.test360 E xlog_open: Error in open xlog 2025-07-02 20:15:22.273 27328-27389 xlog_client com.example.test360 E xlog open fail 2025-07-02 20:15:22.309 1224-2386 AudioPolicyIntefaceImpl audioserver E getInputForAttr permission denied: recording not allowed for AttributionSourceState{pid: 27328, uid: 10134, packageName: com.example.test360, attributionTag: (null), token: {no toString() implemented}, renouncedPermissions: [], next: []} 2025-07-02 20:15:22.309 1224-29515 AudioPolicyIntefaceImpl audioserver E getInputForAttr permission denied: recording not allowed for AttributionSourceState{pid: 27328, uid: 10134, packageName: com.example.test360, attributionTag: (null), token: {no toString() implemented}, renouncedPermissions: [], next: []} 2025-07-02 20:15:22.309 27328-27364 AudioRecord com.example.test360 E createRecord_l(0): AudioFlinger could not create record track, status: -1 2025-07-02 20:15:22.309 27328-27367 AudioRecord com.example.test360 E createRecord_l(0): AudioFlinger could not create record track, status: -1 2025-07-02 20:15:22.309 27328-27364 AudioRecord-JNI com.example.test360 E Error creating AudioRecord instance: initialization check failed with status -1. 2025-07-02 20:15:22.309 27328-27364 android.me...udioRecord com.example.test360 E Error code -20 when initializing native AudioRecord object. 2025-07-02 20:15:22.310 27328-27364 VideoCapture com.example.test360 E AudioRecord object cannot initialized correctly! 2025-07-02 20:15:22.311 27328-27367 AudioRecord-JNI com.example.test360 E Error creating AudioRecord instance: initialization check failed with status -1. 2025-07-02 20:15:22.311 27328-27364 FileUtils com.example.test360 E err open mi_exception_log errno=2 2025-07-02 20:15:22.311 27328-27364 FileUtils com.example.test360 E err write to mi_exception_log 2025-07-02 20:15:22.311 27328-27367 android.me...udioRecord com.example.test360 E Error code -20 when initializing native AudioRecord object. 2025-07-02 20:15:22.311 27328-27367 VideoCapture com.example.test360 E AudioRecord object cannot initialized correctly! 2025-07-02 20:15:22.311 27328-27367 FileUtils com.example.test360 E err open mi_exception_log errno=2 2025-07-02 20:15:22.311 27328-27367 FileUtils com.example.test360 E err write to mi_exception_log 2025-07-02 20:15:22.315 27328-27387 send_data_to_xlog com.example.test360 E send_video_play_to_xlog, start 2025-07-02 20:15:22.315 27328-27387 xlog_client com.example.test360 E xlog_open: Error in open xlog 2025-07-02 20:15:22.315 27328-27387 xlog_client com.example.test360 E xlog open fail 2025-07-02 20:15:22.329 27328-27420 send_data_to_xlog com.example.test360 E send_video_play_to_xlog, start 2025-07-02 20:15:22.329 27328-27420 xlog_client com.example.test360 E xlog_open: Error in open xlog 2025-07-02 20:15:22.329 27328-27420 xlog_client com.example.test360 E xlog open fail 2025-07-02 20:15:22.352 1224-2386 AudioPolicyIntefaceImpl audioserver E getInputForAttr permission denied: recording not allowed for AttributionSourceState{pid: 27328, uid: 10134, packageName: com.example.test360, attributionTag: (null), token: {no toString() implemented}, renouncedPermissions: [], next: []} 2025-07-02 20:15:22.352 27328-27367 AudioRecord com.example.test360 E createRecord_l(0): AudioFlinger could not create record track, status: -1 2025-07-02 20:15:22.352 27328-27367 AudioRecord-JNI com.example.test360 E Error creating AudioRecord instance: initialization check failed with status -1. 2025-07-02 20:15:22.352 27328-27367 android.me...udioRecord com.example.test360 E Error code -20 when initializing native AudioRecord object. 2025-07-02 20:15:22.352 27328-27367 VideoCapture com.example.test360 E AudioRecord object cannot initialized correctly! 2025-07-02 20:15:22.355 27328-27420 send_data_to_xlog com.example.test360 E send_video_play_to_xlog, start 2025-07-02 20:15:22.356 27328-27420 xlog_client com.example.test360 E xlog_open: Error in open xlog 2025-07-02 20:15:22.356 27328-27420 xlog_client com.example.test360 E xlog open fail 2025-07-02 20:15:22.368 27328-27437 send_data_to_xlog com.example.test360 E send_video_play_to_xlog, start 2025-07-02 20:15:22.368 27328-27437 xlog_client com.example.test360 E xlog_open: Error in open xlog 2025-07-02 20:15:22.368 27328-27437 xlog_client com.example.test360 E xlog open fail 2025-07-02 20:15:22.392 1224-2386 AudioPolicyIntefaceImpl audioserver E getInputForAttr permission denied: recording not allowed for AttributionSourceState{pid: 27328, uid: 10134, packageName: com.example.test360, attributionTag: (null), token: {no toString() implemented}, renouncedPermissions: [], next: []} 2025-07-02 20:15:22.392 27328-27367 AudioRecord com.example.test360 E createRecord_l(0): AudioFlinger could not create record track, status: -1 2025-07-02 20:15:22.400 27328-27367 AudioRecord-JNI com.example.test360 E Error creating AudioRecord instance: initialization check failed with status -1. 2025-07-02 20:15:22.401 27328-27367 android.me...udioRecord com.example.test360 E Error code -20 when initializing native AudioRecord object. 2025-07-02 20:15:22.401 27328-27367 VideoCapture com.example.test360 E AudioRecord object cannot initialized correctly! 请解析错误的原因
最新发布
07-03
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值