PJSUA2的功能是圍繞Buddy類為中心展開的。該類表示一個遠(yuǎn)端鏈接。
要使用Buddy類,需要根據(jù)需求實現(xiàn)其子類,如:
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);
}
}
在子類中,應(yīng)用程序可以實現(xiàn)好友回調(diào),以獲得好友狀態(tài)更改的通知。
訂閱好友的狀態(tài)
要訂閱好友的狀態(tài),需添加好友對象并訂閱好友的狀態(tài)。下面的代碼片段實現(xiàn)這些示例:
try {
bud.subscribePresence(true);
} catch (Exception e) {
}
可以在onBuddyState()回調(diào)中獲得好友的狀態(tài)改變。
響應(yīng)訂閱請求
默認(rèn)情況下,會自動接受對帳戶傳入的(存在)訂閱。您可能想要更改此行為,例如僅僅好友列表中的一個好友時自動接受訂閱,以及任何其他用戶提示是否希望接受請求的消息。
這可以通過重寫Account類的onIncomingSubscribe()方法來實現(xiàn)。
更改帳戶的在線狀態(tài)
要更改帳戶的狀態(tài),可使用Account.setOnlineStatus()函數(shù)設(shè)置帳戶的在線狀態(tài)。
當(dāng)更改存在狀態(tài)時,帳戶將根據(jù)自身配置將新狀態(tài)發(fā)布給所有在線用戶,使用PUBLISH請求或NOTIFY請求,或同時使用上述兩個請求。
即時通訊
可以使用Buddy.sendInstantMessage()發(fā)送IM。傳出即時消息的傳輸狀態(tài)在Account類的Account.onInstantMessageStatus()回調(diào)方法中給出。
除了發(fā)送即時消息,還可使用Buddy.sendTypingIndication()向遠(yuǎn)程伙伴發(fā)送打字提示。
接收IM和不在呼叫范圍內(nèi)的打字提示將在回調(diào)函數(shù)Account.onInstantMessage()和Account.onTypingIndication()中給出(報告)。
或者,可使用Call.sendInstantMessage()和Call.sendTypingIndication()在呼叫中發(fā)送IM和鍵入指示。
關(guān)于上述詳細(xì)類信息參考可以參照官方文檔pjsip-book