package com.sinovoice.open.sys;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import android.content.Context;
import android.os.Environment;
import android.util.Log;
import com.sinovoice.hcicloudsdk.api.HciCloudSys;
import com.sinovoice.hcicloudsdk.common.AuthExpireTime;
import com.sinovoice.hcicloudsdk.common.HciErrorCode;
import com.sinovoice.hcicloudsdk.common.InitParam;
public class HciCloudSysHelper {
private static final String TAG = HciCloudSysHelper.class.getSimpleName();
private static HciCloudSysHelper mInstance;
private HciCloudSysHelper() {
}
public static HciCloudSysHelper getInstance() {
if (mInstance == null) {
mInstance = new HciCloudSysHelper();
}
return mInstance;
}
/**
* HciCloudϵͳ��ʼ��
*
* @return ��ʼ��״̬���ɹ���ʧ��
*/
public int init(Context context) {
// ������Ϣ,����InitParam, ������ò������ַ���
InitParam initParam = getInitParam(context);
String strConfig = initParam.getStringConfig();
Log.i(TAG, "strConfig value:" + strConfig);
// ��ʼ��
int initResult = HciCloudSys.hciInit(strConfig, context);
if (initResult != HciErrorCode.HCI_ERR_NONE) {
Log.e(TAG, "hciInit error: " + initResult);
return initResult;
} else {
Log.i(TAG, "hciInit success");
}
// ��ȡ��Ȩ/������Ȩ�ļ� :
initResult = checkAuth();
if (initResult != HciErrorCode.HCI_ERR_NONE) {
// ����ϵͳ�Ѿ���ʼ���ɹ�,�ڽ���ǰ��Ҫ���÷���hciRelease()����ϵͳ�ķ���ʼ��
HciCloudSys.hciRelease();
return initResult;
}
return HciErrorCode.HCI_ERR_NONE;
}
/**
* ϵͳ����ʼ��
*/
public void release() {
int nRet = HciCloudSys.hciRelease();
Log.i(TAG, "HciCloud release, result = " + nRet);
}
/**
* ���س�ʼ����Ϣ
*
* @param context �������ᄈ
* @return ϵͳ��ʼ������
*/
private InitParam getInitParam(Context context) {
String authDirPath = context.getFilesDir().getAbsolutePath();
// ǰ����������
InitParam initparam = new InitParam();
// ��Ȩ�ļ�����·�����������
initparam.addParam(InitParam.PARAM_KEY_AUTH_PATH, authDirPath);
// �Ƿ��Զ���������Ȩ,��� ��ȡ��Ȩ/������Ȩ�ļ���ע��
initparam.addParam(InitParam.PARAM_KEY_AUTO_CLOUD_AUTH, "no");
// �����Ʒ���Ľӿڵ�ַ���������
initparam.addParam(InitParam.PARAM_KEY_CLOUD_URL, AccountInfo
.getInstance().getCloudUrl());
// ������Key���������ɽ�ͨ�����ṩ
initparam.addParam(InitParam.PARAM_KEY_DEVELOPER_KEY, AccountInfo
.getInstance().getDeveloperKey());
// Ӧ��Key���������ɽ�ͨ�����ṩ
initparam.addParam(InitParam.PARAM_KEY_APP_KEY, AccountInfo
.getInstance().getAppKey());
// ������־����
String sdcardState = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(sdcardState)) {
String sdPath = Environment.getExternalStorageDirectory()
.getAbsolutePath();
String packageName = context.getPackageName();
String logPath = sdPath + File.separator + "sinovoice"
+ File.separator + packageName + File.separator + "log"
+ File.separator;
// ��־�ļ���ַ
File fileDir = new File(logPath);
if (!fileDir.exists()) {
fileDir.mkdirs();
}
// ��־��·������ѡ�������������Ϊ����������־
initparam.addParam(InitParam.PARAM_KEY_LOG_FILE_PATH, logPath);
// ��־��Ŀ��Ĭ�ϱ������ٸ���־�ļ�����������ɵ���־
initparam.addParam(InitParam.PARAM_KEY_LOG_FILE_COUNT, "5");
// ��־��С��Ĭ��һ����־�ļ�д���λΪK
initparam.addParam(InitParam.PARAM_KEY_LOG_FILE_SIZE, "1024");
// ��־�ȼ���0=�ޣ�1=����2=���棬3=��Ϣ��4=ϸ�ڣ�5=���ԣ�SDK�����С�ڵ���logLevel����־��Ϣ
initparam.addParam(InitParam.PARAM_KEY_LOG_LEVEL, "5");
}
return initparam;
}
/**
* ��ȡ��Ȩ
*
* @return true �ɹ�
*/
private int checkAuth() {
// ��ȡϵͳ��Ȩ����ʱ��
int initResult;
AuthExpireTime objExpireTime = new AuthExpireTime();
initResult = HciCloudSys.hciGetAuthExpireTime(objExpireTime);
if (initResult == HciErrorCode.HCI_ERR_NONE) {
// ��ʾ��Ȩ����,���û�����Ҫ��ע��ֵ,�˴�����ɺ���
Date date = new Date(objExpireTime.getExpireTime() * 1000);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd",
Locale.CHINA);
Log.i(TAG, "expire time: " + sdf.format(date));
if (objExpireTime.getExpireTime() * 1000 < System
.currentTimeMillis()) {
// ��ȡ��Ȩ����, ����ֵΪ������
Log.i(TAG, "expired date");
initResult = HciCloudSys.hciCheckAuth();
if (initResult == HciErrorCode.HCI_ERR_NONE) {
Log.i(TAG, "checkAuth success");
return initResult;
} else {
Log.e(TAG, "checkAuth failed: " + initResult);
return initResult;
}
} else {
// �Ѿ��ɹ���ȡ����Ȩ,���Ҿ�����Ȩ�����г����ʱ��(>7��)
Log.i(TAG, "checkAuth success");
return initResult;
}
} else if (initResult == HciErrorCode.HCI_ERR_SYS_AUTHFILE_INVALID) {
// �����ȡAuth�ļ�ʧ��(�����һ������,��û����Ȩ�ļ�),��ʼ��ȡ��Ȩ
Log.i(TAG, "authfile invalid");
initResult = HciCloudSys.hciCheckAuth();
if (initResult == HciErrorCode.HCI_ERR_NONE) {
Log.i(TAG, "checkAuth success");
return initResult;
} else {
Log.e(TAG, "checkAuth failed: " + initResult);
return initResult;
}
} else {
// ����ʧ��ԭ��,�����SDK�����ĵ���"�����ֶ�ֵ"�еĴ�����ĺ������������
Log.e(TAG, "getAuthExpireTime Error:" + initResult);
return initResult;
}
}
}