下载小鱼硬件SDK ainemo_openapi_v2.x.jar,并将文件拷贝到APP的libs目录下。
APP需要在Application中通过调用NemoOpenAPI.init()函数初始化SDK:
public class BaseApplication extends Application {
private static final Logger LOGGER = Logger.getLogger(BaseApplication.class.getName());
@Override
public void onCreate() {
super.onCreate();
NemoOpenAPI.init(this);
}
同时在AndroidManifest.xml中添加Application的声明:
<application
android:name="com.xintong.cloudpatient.xiaoyu.BaseApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.xintong.cloudpatient.xiaoyu.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="NEMO_OPENAPI_APPID"
android:value="/NXAANXQ5JELOAVAMDQCRIYGLUEKAZPPZIHUS1JMH+AAA=" />
</application>
获取终端的序列号
public String getNemoSn()
/**
* 呼叫其他终端
*
* @param nemoNumber 被叫终端号
* @param displayName 被叫终端名称
*@param appendInfo 呼叫附加信息。在呼叫中,附加信息将传递给被叫终端
* @return 呼叫结果, 0表示成功,其他参考错误对照表
*/
public int makeCall(String nemoNumber, String displayName, String appendInfo)
/**
* 加入视频会议
*
* @param conferenceNumber 云会议号
* @param password 云会议室密码,若云会议室无密码,填空字符串。
* @return 呼叫结果, 0表示成功,其他参考错误对照表
*/
public int makeCall(String conferenceNumber, String password)
/**
* 使用给定显示名称,呼叫其他终端
*
* @param number 被叫号码
* @param peerName 被叫终端名称
* @param hostName 主叫终端显示名称
* @param appendInfo 呼叫附加信息,在呼叫系统将传递给被叫方
* @return 呼叫结果, 0表示成功,其他参考错误对照表
*/
public int makeCall(String number, String peerName, String hostName,String appendInfo)
/**
* 使用自定义显示名称,呼叫其他终端
*
* @param number 被叫号码
* @param peerName 被叫终端名称
* @param hostName 主叫终端显示名称
* @param appendInfo 呼叫附加信息。在呼叫中,附加信息将传递给被叫终端
* @param addToRecent 是否添加呼叫记录到通话记录
* @return 呼叫结果, 0表示成功,其他参考错误对照表
*/
public int makeCall(String number, String peerName, String HostName,String appendInfo, boolean addToRecent)
/**
* 拨打PSTN电话,呼叫运营商号码
*
* @param PSTNCallNo 被叫PSTN号码,比如拨打北京地区的10086,要传入+86-01010086
* @param peerName 被叫方名称
* @return 呼叫结果, 0表示成功,其他参考错误对照表
*/
public int makePSTNCall(String PSTNCallNo, String peerName)
/**
* 返回视频会议界面
* 在呼叫过程中,打开3方应用的某些界面,需要返回呼叫界面时调用
*/
public int resumeCall()
/**
* 挂断当前呼叫
*/
public int dropCall()
呼叫结束以后,将通过OPENAPI_MAKE_CALL_RESULT异步消息,返回呼叫统计信息.
呼叫返回的结构:
public class MakeCallResult {
String calleeName; //主叫的名称
String calleeNemoNumber; //主叫的小鱼号
String calleeSN; //主要小鱼的序列号
String callerName; //被叫小鱼的名称
String callerNemoNumber; //被叫小鱼的小鱼号
String appendInfo; //呼叫的附件信息,对于信同是挂号单号
long startTime; //呼叫的开始时间, 时间戳
long duration; //呼叫时长,单位ms。从呼叫接通开始计算,未接通为 0.
boolean isCallOutSuccess; //呼叫远端是否接通, 远端接通以后为true,未接通为false。
String disonnectReason; //呼叫断开原因, STATUS_OK:正常结束,主叫或被叫主动挂断; PEER_NOT_FOUND:对方不在线;
// TEL_FAIL:呼叫失败; TIME_OUT:对方无应答; LOCAL_NET_DISCONNECT:本地网络异常;
其他情况请酌情处理。}
Java
public class MainActivity extends Activity implements NemoCallback {
private static final Logger LOGGER = Logger.getLogger(MainActivity.class.getName());
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
NemoOpenAPI.getInstance().registerCallback(this);
String nemoNumber = getIntent().getStringExtra("nemoNumber");
LOGGER.info("xintong startup with nemonumber:" + nemoNumber);
//获取终端序列号的代码
TextView snText = (TextView)findViewById(R.id.test_sn_text);
snText.setText("sn: " + NemoOpenAPI.getInstance().getNemoSn());
//视频呼叫测试按钮
Button callButton = (Button) findViewById(R.id.test_call_button);
callButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
NemoOpenAPI.getInstance().makeCall("675763", "内科张医生", "20150818070238挂号单");
}
});
//呼叫会议测试按钮
Button conferenceButton = (Button) findViewById(R.id.test_conference_button);
conferenceButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
NemoOpenAPI.getInstance().makeCall("91381145XXXX", "123456");
}
});
//挂断呼叫测试按钮
Button dropCallButton = (Button) findViewById(R.id.test_dropCall_button);
dropCallButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
NemoOpenAPI.getInstance().dropCall();
}
});
//返回呼叫界面测试按钮
Button resumeCallButton = (Button) findViewById(R.id.test_resumeCall_button);
resumeCallButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
NemoOpenAPI.getInstance().resumeCall();
}
});
}
@Override
protected void onDestroy() {
NemoOpenAPI.getInstance().unregisterCallback(this);
super.onDestroy();
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
LOGGER.info("MainActivity.handleMessage:" + msg.toString());
switch (msg.what) {
case Msg.OPENAPI_MAKE_CALL_RESULT:
MakeCallResult result = msg.getData().getParcelable(NemoConst.KEY_MAKE_CALL_RESULT);
Toast.makeText(getApplicationContext(), result.toString(), Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
};
@Override
public void onNemoCallback(Message msg) {
mHandler.sendMessage(Message.obtain(msg));
}
ERR_OK = 0, // 操作成功
ERR_UNSUPPORT = -1, // 不支持的API调用
ERR_AUTH_DENIED = -2, // APPID校验失败
ERR_CONTEXT_NULL = -3, // 内部错误
ERR_USER_CANCEL = -4, // 操作取消
ERR_NETWOK_DISCONNECTED = -5; // 网络断开
ERR_WEBSOCKET_DISCONNECT = -6; // 与后台服务连接异