| 类别 | 兼容范围 |
|---|---|
| 系统 | 支持Android 5.0 ~ Android 13 版本,鸿蒙系统未做系统兼容性验证 |
| 机型 | 上市的Android手机和平板、及符合具体能力性能要求的Android系统扫描笔、手表等设备 |
| 网络 | 对网络无要求,设备具备联网条件,可使用在线激活方式,首次使用需要连接网络。若设备不能联网,需要使用离线激活方式 |
| 开发环境 | 建议使用 Android Studio 进行开发 |

dependencies {
// 已忽略无关代码
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation files('libs/AIKit.aar')
}| 权限 | 使用说明 |
|---|---|
| INTERNET | SDK需要访问网络获取、更新授权 |
| READ_PHONE_STATE | 获取设备IMEI用于精准授权,IMEI加密存储,不会存储明文 |
| WRITE_EXTERNAL_STORAGE | SDK写本地日志需要用到该权限 |
| READ_EXTERNAL_STORAGE | SDK加载本地模型资源文件需要该权限 |
| MOUNT_UNMOUNT_FILESYSTEMS | Android 11以上需要该权限 |
| READ_PRIVILEGED_PHONE_STATE | Android 10 以后新增权限,同 READ_PHONE_STATE |
| MANAGE_EXTERNAL_STORAGE | 获取所有文件的访问权限(Android 11以上需要该权限) |
| READ_PHONE_NUMBERS | 获取设备IMEI用于精准授权,IMEI加密存储,不会存储明文(Android 11及以上获取) |
<!-- 移除SDK非必须权限示例 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove" />
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" tools:node="remove" /><uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" /><application android:requestLegacyExternalStorage="true"/>// 初始化参数构建
AiHelper.Params params = AiHelper.Params.builder()
.appId(appID)
.apiKey(apiKey)
.apiSecret(apiSecret)
.ability("e95777571")
.workDir("/sdcard/iflytek/aikit")//SDK工作路径,这里为绝对路径,此处仅为示例
.build();
// 初始化
AiHelper.getInst().init(this, params);| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appID | String | 是 | 应用ID |
| apiKey | String | 是 | 离线引擎托管平台创建应用后,生成的唯一应用标识 |
| apiSecret | String | 是 | 离线引擎托管平台创建应用后,生成的唯一应用秘钥 |
| workDir | String | 是 | SDK工作目录。默认读取能力资源、写SDK日志在此路径下 |
| licenseFile | String | 否 | 离线授权license文件绝对路径,SDK离线激活方式,需要从离线引擎托管平台申请的离线授权license文件,放入设备指定路径中(可放入至SDK工作路径下),即licenseFile参数即为离线激活文件的绝对工作路径。 |
| customDeviceId | String | 否 | 用户自定义设备指纹块,默认为空,设置后会成为设备指纹的一部分,建议设置长度低于256 |
| authType | int | 否 | 离线授权类型(0或1),0-->(默认)设备级授权(DEVICE)和 1-->应用级授权(APP) |
| authInterval | int | 否 | 在线授权校验间隔时长,默认为300s,可自定义设置,最短为60s,单位秒 |
| resDir | String | 否 | 指定资源读取路径,不设置默认从workDir读取 |
| ability | String | 是 | SDK v2.2.13+版本新增接口,传入需要用到的一个或多个能力ID,格式为"xxxx1;xxxx2",多个能力ID中间用 **英文分号 **隔开,如果注册的能力非空,SDK将对传入的能力ID授权; |
AiHelper.getInst().registerListener(coreListener);// 注册SDK 初始化状态监听
AiHelper.getInst().registerListener("e95777571", aiRespListener);// 注册能力结果监听private AuthListener coreListener = new AuthListener() {
@Override
public void onAuthStateChange(final ErrType type, final int code) {
Log.i(TAG, "core listener code:" + code);
switch (type) {
case AUTH:
Log.i(TAG,"SDK状态:授权结果码" + code);
break;
case HTTP:
Log.i(TAG,"SDK状态:HTTP认证结果" + code);
break;
default:
Log.i(TAG,"SDK状态:其他错误");
}
}
};| 参数 | 类型 | 说明 |
|---|---|---|
| type | ErrType | SDK错误类型,0 表示授权错误,1 表示 http 请 求错误 |
| code | int | 错误码,0 表示正常 |
/**
* 能力监听回调
*/
private AiListener aiRespListener = new AiListener() {
@Override
public void onResult(int handleID, List<AiResponse> outputData, Object usrContext) {
if (null != outputData && outputData.size() > 0) {
for (int i = 0; i < outputData.size(); i++) {
byte[] bytes = outputData.get(i).getValue();
if (bytes == null) {
continue;
}
String key = outputData.get(i).getKey();
//获取到结果的key及value,可根据业务保存存储结果或其他处理
}
}
}
@Override
public void onEvent(int handleID, int event, List<AiResponse> eventData, Object usrContext);
}
@Override
public void onError(int handleID, int err, String msg, Object usrContext);
}
};| 参数 | 类型 | 说明 |
|---|---|---|
| handleID | int | 会话ID |
| outputData | List | 能力执行结果 |
| usrContext | Object | 用户自定义标识 |
| 参数 | 类型 | 说明 |
|---|---|---|
| handleID | int | 会话ID |
| event | int | 事件状态,0:未知错误;1:开始;2:结束;3:超时;4:进行中 |
| eventData | List | 事件消息数据 |
| usrContext | Object | 用户自定义标识 |
| 参数 | 类型 | 说明 |
|---|---|---|
| handleID | int | 会话ID |
| err | int | 错误码 |
| msg | String | 错误相关标识 |
| usrContext | Object | 用户自定义标识 |
| 参数 | 类型 | 说明 |
|---|---|---|
| key | String | 输出数据名称 |
| type | enum | 输出数据类型,1=文本 |
| value | byte[] | 字节数组类型输出数据 |
| varType | enum | 输出数据参数类型,0=字节数组 |
| len | int | 输出数据长度 |
final AiRequest.Builder params = AiRequest.builder();
params.param("res_dir","$paramValue");
//params.param("log_level","6");
ret = AiHelper.getInst().engineInit("e95777571",params.build());| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| abilityId | String | 是 | 能力ID |
| param | AiRequest | 否 | 引擎初始化参数,可使用AiRequest.Builder快捷构建,paramKey、paramValue 参考引擎参数说明 |