HarmonyOS鸿蒙Next中实时语音识别部分设备报错 subError code: 3003,errorMessage: Service unavailable

HarmonyOS鸿蒙Next中实时语音识别部分设备报错 subError code: 3003,errorMessage: Service unavailable 实时语音识别,集成后在小米14手机HyperOS 2.0.109.0系统上可以正常识别,但在定制的平板系统上报错,报错的设备Android版本是11。在报错的设备上安装通义千问App也可以正常调用语音输入。

调用代码为:

// context为应用上下文信息。
mSpeechRecognizer = MLAsrRecognizer.createAsrRecognizer(ContextUtil.getAppContext());
MLAsrListener mlAsrListener = new MLAsrListener() {
    @Override
    public void onResults(Bundle bundle) {
        System.out.println("voice :onResults = " + bundle.toString());
        if (null != mCallback) {
            mCallback.onResults(bundle);
        }
    }

    @Override
    public void onRecognizingResults(Bundle bundle) {
        System.out.println("voice :onRecognizingResults = " + bundle.toString());
        if (null != mCallback) {
            mCallback.onRecognizingResults(bundle);
        }
    }

    @Override
    public void onError(int i, String s) {
        System.out.println("voice :error = " + s);
    }

    @Override
    public void onStartListening() {
        System.out.println("voice :onStartListening");
    }

    @Override
    public void onStartingOfSpeech() {
        System.out.println("voice :onStartingOfSpeech");
    }

    @Override
    public void onVoiceDataReceived(byte[] bytes, float v, Bundle bundle) {
        System.out.println("voice :onVoiceDataReceived = " + bundle.toString());
    }

    @Override
    public void onState(int i, Bundle bundle) {
        System.out.println("voice :onState = " + bundle.toString());
    }
};
mSpeechRecognizer.setAsrListener(mlAsrListener);
// 新建Intent,用于配置语音识别参数。
mSpeechRecognizerIntent = new Intent(MLAsrConstants.ACTION_HMS_ASR_SPEECH);
// 通过Intent进行语音识别参数设置。
mSpeechRecognizerIntent
    // 设置识别语言为英语,若不设置,则默认识别英语。支持设置:"zh-CN":中文;"en-US":英语;"fr-FR":法语;"es-ES":西班牙语;"de-DE":德语;"it-IT":意大利语;"ar": 阿拉伯语;"ru-RU":俄语;"th=TH":泰语;"ms-MY":马来语;"fil-PH":菲律宾语;"tr-TR":土耳其语。
    .putExtra(MLAsrConstants.LANGUAGE, "zh-CN")
    // 设置识别文本返回模式为边识别边出字,若不设置,默认为边识别边出字。支持设置:
    // MLAsrConstants.FEATURE_WORDFLUX:通过onRecognizingResults接口,识别同时返回文字;
    // MLAsrConstants.FEATURE_ALLINONE:识别完成后通过onResults接口返回文字。
    .putExtra(MLAsrConstants.FEATURE, MLAsrConstants.FEATURE_WORDFLUX)
    // 静音检测时长(发音前,可设置3000到60000毫秒)(毫秒)
    .putExtra(MLAsrConstants.VAD_START_MUTE_DURATION, 6000)
    // 静音检测时长(发音后)(毫秒)
    .putExtra(MLAsrConstants.VAD_END_MUTE_DURATION, 700)
    // 是否设置标点
    .putExtra(MLAsrConstants.PUNCTUATION_ENABLE, true)
// 设置使用场景,MLAsrConstants.SCENES_SHOPPING:表示购物,仅支持中文,该场景对华为商品名识别进行了优化。
//.putExtra(MLAsrConstants.SCENES, MLAsrConstants.SCENES_SHOPPING)
;

public void startRecognizing() {
    // 启动语音识别。
    mSpeechRecognizer.startRecognizing(mSpeechRecognizerIntent);
}

MLAsrListener的Log为:

System.out               I  voice :onStartListening
System.out               I  voice :onState = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onStartingOfSpeech
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out               I  voice :onVoiceDataReceived = Bundle[{}]
System.out

更多关于HarmonyOS鸿蒙Next中实时语音识别部分设备报错 subError code: 3003,errorMessage: Service unavailable的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS鸿蒙Next中,实时语音识别报错subError code: 3003,errorMessage: Service unavailable,通常是由于语音识别服务不可用或未正确初始化导致的。可能的原因包括设备网络连接问题、服务端故障、或权限配置错误。建议检查设备网络状态,确保语音识别服务已正确配置并具备必要的权限。

更多关于HarmonyOS鸿蒙Next中实时语音识别部分设备报错 subError code: 3003,errorMessage: Service unavailable的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


从日志分析来看,错误码3003表示"Service unavailable",这通常与网络连接或服务端问题有关。以下是关键发现:

  1. 日志显示WebSocket连接已建立(onOpen),但随后收到3003错误码的关闭消息(onClosing: code: 3003)

  2. 网络相关日志显示:

  • 获取国家码失败(getVendorCountry=UNKNOWN)
  • 检测到异常网络状态(onAbnormal)
  • 最终出现"Socket is closed"错误
  1. 虽然音频数据已发送(uploadVoiceSize: 217600),但服务端返回了错误

建议检查:

  1. 设备网络连接是否稳定
  2. 服务端是否支持Android 11设备
  3. 是否有地区限制(国家码获取失败)
  4. 与通义千问App的网络请求差异

错误发生在服务端响应阶段,建议先确保网络环境正常,再检查服务兼容性。

回到顶部