PJSUA2的功能是围绕Buddy类为中心展开的。该类表示一个远端链接。
要使用Buddy类,需要根据需求实现其子类,如:
class MyBuddy extends Buddy {
public BuddyConfig cfg;
MyBuddy(BuddyConfig config) {
super();
cfg = config;
}
String getStatusText() {
BuddyInfo bi;
try {
bi = getInfo();
} catch (Exception e) {
return "?";
}
String status = "";
if (bi.getSubState() == pjsip_evsub_state.PJSIP_EVSUB_STATE_ACTIVE) {
if (bi.getPresStatus().getStatus() ==
pjsua_buddy_status.PJSUA_BUDDY_STATUS_ONLINE) {
status = bi.getPresStatus().getStatusText();
if (status == null || status.length() == 0) {
status = "Online";
}
} else if (bi.getPresStatus().getStatus() ==
pjsua_buddy_status.PJSUA_BUDDY_STATUS_OFFLINE) {
status = "Offline";
} else {
status = "Unknown";
}
}
return status;
}
@Override
public void onBuddyState() {
MyApp.observer.notifyBuddyState(this);
}
}
在子类中,应用程序可以实现好友回调,以获得好友状态更改的通知。
订阅好友的状态
要订阅好友的状态,需添加好友对象并订阅好友的状态。下面的代码片段实现这些示例:
try {
bud.subscribePresence(true);
} catch (Exception e) {
}
可以在onBuddyState()回调中获得好友的状态改变。
响应订阅请求
默认情况下,会自动接受对帐户传入的(存在)订阅。您可能想要更改此行为,例如仅仅好友列表中的一个好友时自动接受订阅,以及任何其他用户提示是否希望接受请求的消息。
这可以通过重写Account类的onIncomingSubscribe()方法来实现。
更改帐户的在线状态
要更改帐户的状态,可使用Account.setOnlineStatus()函数设置帐户的在线状态。
当更改存在状态时,帐户将根据自身配置将新状态发布给所有在线用户,使用PUBLISH请求或NOTIFY请求,或同时使用上述两个请求。
即时通讯
可以使用Buddy.sendInstantMessage()发送IM。传出即时消息的传输状态在Account类的Account.onInstantMessageStatus()回调方法中给出。
除了发送即时消息,还可使用Buddy.sendTypingIndication()向远程伙伴发送打字提示。
接收IM和不在呼叫范围内的打字提示将在回调函数Account.onInstantMessage()和Account.onTypingIndication()中给出(报告)。
或者,可使用Call.sendInstantMessage()和Call.sendTypingIndication()在呼叫中发送IM和键入指示。
关于上述详细类信息参考可以参照官方文档pjsip-book
网友评论