pjsip开发——Buddy

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

你可能感兴趣的:(pjsip开发——Buddy)