Android “Cannot create AudioRecord”问题

本文详细介绍了在使用Google Assistant API时遇到CannotcreateAudioRecord问题的解决方案,包括在AndroidManifest.xml中添加权限申请,动态申请权限,以及如何在6.0以上版本的设备上手动打开权限。

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

Cannot create AudioRecord 问题研究

最近在研究Google Assistant API,遇到Cannot create AudioRecord问题。

工具: Android Studio 3.1.4
版本: Android 6.0以上

错误信息如下:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.androidthings.assistant/com.example.androidthings.assistant.AssistantActivity}: java.lang.UnsupportedOperationException: Cannot create AudioRecord
                                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
                                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
                                 at android.app.ActivityThread.-wrap11(Unknown Source:0)
                                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
                                 at android.os.Handler.dispatchMessage(Handler.java:106)
                                 at android.os.Looper.loop(Looper.java:164)
                                 at android.app.ActivityThread.main(ActivityThread.java:6494)
                                 at java.lang.reflect.Method.invoke(Native Method)
                                 at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Caused by: java.lang.UnsupportedOperationException: Cannot create AudioRecord
                                at android.media.AudioRecord$Builder.build(AudioRecord.java:626)
                                at com.example.androidthings.assistant.EmbeddedAssistant$Builder.build(EmbeddedAssistant.java:706)
                               at com.example.androidthings.assistant.AssistantActivity.onCreate(AssistantActivity.java:313)

1.AndroidManifest.xml

添加权限申请:<uses-permission android:name="android.permission.RECORD_AUDIO" />

2.动态申请权限

在onCreate里面添加:

requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO}, 0);

3.手动打开权限

在6.0以上的手机首次安装apk,需要手动设置权限,因此找到“设置” -> “应用管理” 打开对应的权限设置。

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
### Java中 `Cannot create AudioTrack` 的解决方案 当遇到 `java.lang.UnsupportedOperationException: Cannot create AudioTrack` 异常时,通常意味着应用程序尝试创建 `AudioTrack` 实例失败。这可能是由于多种原因引起的。 #### 权限配置不当 如果应用缺少必要的音频录制权限,则可能会导致无法成功初始化 `AudioTrack` 对象。确保在 AndroidManifest.xml 文件中声明了录音权限[^3]: ```xml <uses-permission android:name="android.permission.RECORD_AUDIO" /> ``` 对于 Android 6.0 (API level 23) 及以上版本的应用程序,在运行时还需要动态请求此权限。可以通过以下方式实现: ```java if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.RECORD_AUDIO}, MY_PERMISSIONS_REQUEST_RECORD_AUDIO); } ``` #### 音频参数不兼容 另一个常见原因是所选的音频配置可能与设备硬件不匹配。建议调整采样率、声道数以及缓冲区大小等设置来适应更多类型的设备。例如可以尝试修改为常见的44100Hz单声道格式: ```java int sampleRateInHz = 44100; int channelConfig = AudioFormat.CHANNEL_OUT_MONO; int audioFormat = AudioFormat.ENCODING_PCM_16BIT; // 计算最小缓冲区大小 int minBufferSize = AudioTrack.getMinBufferSize(sampleRateInHz, channelConfig, audioFormat); audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRateInHz, channelConfig, audioFormat, minBufferSize * 2, AudioTrack.MODE_STREAM); ``` 此外还可以通过命令行工具查看当前系统的音频状态以帮助诊断问题所在[^4]: ```bash adb shell dumpsys media.audio_flinger ``` 上述方法能够有效处理大部分情况下发生的 `Cannot create AudioTrack` 错误。但如果仍然存在相同错误,则需进一步排查其他潜在因素如内存不足等问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值