全部产品

Android SDK

更新时间:2020-11-17 10:04:08

本文为您介绍如何使用阿里云智能语音服务提供的Android SDK,包括SDK下载安装、关键接口及代码示例。

前提条件

  • 使用SDK前,首先阅读接口说明,详情请参见接口说明

  • 准备好项目appkey,详情请参见创建项目

下载安装

  1. 下载SDK和示例代码

  2. 解压ZIP包,在app/libs目录下获取AAR格式的SDK包。

  3. 使用Android Studio打开此工程。

    其中示例代码为FileTranscriberActivity.java文件。

SDK关键接口

  • initialize:初始化SDK。

    /**
         * 初始化SDK,SDK为单例,请先释放后再次进行初始化。请勿在UI线程调用,可能会引起阻塞。
         * @param callback:事件监听回调,参见下文回调说明。
         * @param parameters:初始化参数,参见接口说明。
         * @param level:log打印级别,值越小打印越多。
         * @param save_log:是否保存log为文件,存储目录为parameter中的debug_path字段值。
         * @return:参见错误码。
         */
    public synchronized int initialize(final INativeFileTransCallback callback,
                                               String parameters,
                                               final Constants.LogLevel level,
                                               final boolean save_log)

    其中,INativeFileTransCallback类型需要实现的回调是onFileTransEventCallback。

    onFileTransEventCallback:文件识别事件回调。

    /**
         * SDK主要事件回调
         * @param event:回调事件,参见如下事件列表。
         * @param resultCode:参见错误码,在出现EVENT_ASR_ERROR事件时有效。
         * @param arg2:保留参数。
         * @param asrResult:语音识别结果。
         * @param taskId:任务ID。
         */
        void onFileTransEventCallback(NuiEvent event, final int resultCode, final int arg2, AsrResult asrResult, String taskId);

    事件列表:

    名称

    说明

    EVENT_FILE_TRANS_CONNECTED

    连接文件识别服务成功

    EVENT_FILE_TRANS_UPLOADED

    上传文件成功

    EVENT_FILE_TRANS_RESULT

    识别最终结果

    EVENT_ASR_ERROR

    根据错误码信息判断出错原因

  • set_params:以JSON格式设置SDK参数。

    /**
         * 以JSON格式设置参数
         * @param params:参见接口说明
         * @return:参见错误码
         */
        public synchronized int setParams(String params)

  • startFileTranscriber:开始文件识别。

    /**
         * 开始识别
         * @param params:识别参数,参见接口说明。
         * @param taskId:开始识别的任务ID,SDK会生成随机字符串。
         * @return:参见错误码
         */
        public synchronized int startFileTranscriber(String params, byte[] taskId)

  • stopFileTranscriber:结束识别。

    /**
         * 结束识别
         * @return:参见错误码
         */
        public synchronized int stopFileTranscriber(String taskId)

  • release:释放SDK。

    /**
         * 释放SDK资源
         * @return:参见错误码
         */
        public synchronized int release()

调用步骤

  1. 初始化SDK。

  2. 根据业务需求设置参数。

  3. 调用startFileTranscriber开始识别。

  4. 在EVENT_FILE_TRANS_RESULT事件中获取最终识别结果。

  5. 结束调用,使用release接口释放SDK资源。

Proguard配置

如果代码使用了混淆,请在proguard-rules.pro中配置:

-keep class com.alibaba.idst.nui.*{*;}

代码示例

NUI SDK初始化

CommonUtils.copyAssetsData(this);
int ret = NativeNui.GetInstance().initialize(this, genInitParams(path,path2), Constants.LogLevel.LOG_LEVEL_VERBOSE, true);

其中,genInitParams生成为String JSON字符串,包含资源目录和用户信息。其中用户信息包含如下字段。

private String genInitParams(String workpath, String debugpath) {
        String str = "";
        try{
            JSONObject object;
            object.put("app_key","");
            object.put("token","");
            object.put("device_id",Utils.getDeviceId());
            object.put("url","");
            object.put("workspace", workpath);
            object.put("debug_path",debugpath);
            str = object.toString();
        } catch (JSONException e) {
            e.printStackTrace();
        }
  return str;
}

开始识别

调用startFileTranscriber方法开启识别。

byte[] task_id = new byte[32];
NativeNui.GetInstance().startFileTranscriber(genDialogParams(), taskId);

回调处理

onNuiEventCallback:NUI SDK事件回调,请勿在事件回调中调用SDK的接口,可能引起死锁。

public void onFileTransEventCallback(Constants.NuiEvent event, final int resultCode, final int arg2, AsrResult asrResult, String taskId) {
        Log.i(TAG, "event=" + event);
    	if (event == Constants.NuiEvent.EVENT_FILE_TRANS_RESULT) {
            showText(asrView, asrResult.asrResult);
        } else if (event == Constants.NuiEvent.EVENT_ASR_ERROR) {
            ;
        }
    }

取消识别

NativeNui.GetInstance().cancelDialog(taskId);