Android “Cannot create AudioRecord”问题

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

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,需要手动设置权限,因此找到“设置” -> “应用管理” 打开对应的权限设置。

### 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、付费专栏及课程。

余额充值