如何在Android Studio中使用Java向Amazon Lex发送语音指令
Amazon Lex Android 端语音发送实现方案
你现有文本请求的凭证、客户端初始化逻辑可以直接复用,只需要将PostTextRequest替换为语音场景专用的PostContentRequest即可,具体实现步骤如下:
1. 提前配置权限
在AndroidManifest.xml中添加录音权限:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
安卓6.0及以上版本需要在调用录音功能前动态申请该权限,否则无法正常录制语音。
2. 语音录制参数说明
Amazon Lex支持pcm、wav、mp3、opus等常见音频格式,推荐使用16kHz采样率、16位位深、单声道的PCM格式,兼容性最高,识别准确率也更好。
3. 核心请求代码
// 复用你已有的初始化逻辑,不需要修改 AWSCredentialsProvider credentialProvider; String accessKeyId = ""; String secretAccessKey = ""; credentialProvider = new StaticCredentialsProvider(new BasicAWSCredentials(accessKeyId, secretAccessKey)); AmazonLexRuntimeClient client = new AmazonLexRuntimeClient(credentialProvider); client.setRegion(Region.getRegion(Regions.US_EAST_2)); // ------------ 以下是语音请求专属逻辑 ------------ PostContentRequest audioRequest = new PostContentRequest(); // 基础参数和文本请求一致 audioRequest.setBotName("你的Bot名称"); audioRequest.setBotAlias("你的Bot别名"); audioRequest.setUserId("用户唯一标识"); // 设置音频格式,这里对应16k采样单声道16位PCM格式,如果你用其他格式对应修改即可 audioRequest.setContentType("audio/l16; rate=16000; channels=1"); // 设置期望的返回格式,要文本返回填application/json,要语音返回填audio/mpeg audioRequest.setAccept("application/json"); // 将你录制好的音频转成字节流传入,这里inputStream就是你录音得到的音频输入流 audioRequest.setInputStream(inputStream); // 注意:请求必须在工作线程执行,不能放在主线程 PostContentResult audioResult = client.postContent(audioRequest); // 解析文本返回结果 String responseMessage = audioResult.getMessage(); String sentimentLabel = audioResult.getSentimentResponse().getSentimentLabel(); Log.e("AMAZON", "返回回复:" + responseMessage); Log.e("AMAZON", "情感标签:" + sentimentLabel); // 如果你设置了返回语音格式,可以通过以下逻辑获取音频流播放 // InputStream audioResponseStream = audioResult.getAudioStream(); // 后续将流转成音频文件播放即可
4. 注意事项
- 不要将固定的访问密钥硬编码在代码中,正式发布版本建议使用AWS Cognito做凭证管理,避免密钥泄露风险。
- 所有Lex相关的网络请求必须放在子线程执行,直接在主线程调用会触发安卓网络主线程异常。
内容的提问来源于stack exchange,提问作者Uriel Frank Feupeussi
相关产品推荐
相关产品推荐

