asmack 申请添加好友和对方同意添加

从今天开始写日志啦!!!

刚接触asmack不久,因为看着其他人的代码写的,所以很多地方不了解原理就去实现了,结果碰到好多问题。

添加好友的时候因为需要向对方发起申请,之前是直接调用roster.createEntry(userName, remarkName, new String[]{ groupName});方法,结果是直接添加了好友,他们之间的关系还是none,基本是添加失败的意思。

后来经过尝试用下面的方法:

1、A向B发起添加好友请求

Presence subscription=new Presence(Presence.Type.subscribe); subscription.setTo(userName+"@"+XmppConnectionManager.getInstance().getConnection().getServiceName());
XmppConnectionManager.getInstance().getConnection().sendPacket(subscription);

2、B接受到请求后,需要采用下面的方法回复A,此时的Presence.Type.subscribed与上面是不同

//同意添加
Presence subscription=new Presence(Presence.Type.subscribed);
subscription.setTo(from);
XmppConnectionManager.getInstance().getConnection().sendPacket(subscription);

3、B同意之后还需要向A回复一个好友添加请求

//同意之后添加对方为好友
Presence reSubscription=new Presence(Presence.Type.subscribe);
reSubscription.setTo(from);
XmppConnectionManager.getInstance().getConnection().sendPacket(reSubscription);

4.A会接受到B发起的好友添加请求,同意后双方的关系变为both,即添加成功


5、好友添加的监听如下:

/**
     * 添加一个监听,监听好友添加请求。
     */
    private void addSubscriptionListener() {
        PacketFilter filter = new PacketFilter() {
            @Override
            public boolean accept(Packet packet) {
                if (packet instanceof Presence) {
                    Presence presence = (Presence) packet;
                    if (presence.getType().equals(Presence.Type.subscribe)) {
                        return true;
                    }
                }
                return false;
            }
        };
        XmppConnectionManager.getInstance().getConnection().addPacketListener(subscriptionPacketListener, filter);
    }

    private PacketListener subscriptionPacketListener = new PacketListener() {

        @Override
        public void processPacket(Packet packet) {
            String user = getSharedPreferences(Constant.LOGIN_SET, 0).getString(Constant.USERNAME, null);
            if (packet.getFrom().contains(user))
                return;
            // 如果是自动接收所有请求,则回复一个添加信息
            if (Roster.getDefaultSubscriptionMode().equals(SubscriptionMode.accept_all)) {
                Presence subscription = new Presence(Presence.Type.subscribe);
                subscription.setTo(packet.getFrom());
                XmppConnectionManager.getInstance().getConnection().sendPacket(subscription);
            } else {
                NoticeManager noticeManager = NoticeManager.getInstance(context);
                Notice notice = new Notice();
                notice.setTitle("好友请求");
                notice.setNoticeType(Notice.ADD_FRIEND);
                notice.setContent(StringUtil.getUserNameByJid(packet.getFrom())+ "申请加您为好友");
                notice.setFrom(packet.getFrom());
                notice.setTo(packet.getTo());
                notice.setNoticeTime(DateUtil.date2Str(Calendar.getInstance(),Constant.MS_FORMART));
                notice.setStatus(Notice.UNREAD);
                //long noticeId = noticeManager.saveNotice(notice);
                long noticeId=2;
                if (noticeId != -1) {
                    Intent intent = new Intent();
                    intent.setAction(Constant.ROSTER_SUBSCRIPTION);
                    notice.setId("" + noticeId);
                    intent.putExtra("notice", notice);
                    sendBroadcast(intent);
                    Log.i("addfriends",packet.getFrom().toString());
                    setNotiType(R.drawable.ic_launcher, "好友请求",StringUtil.getUserNameByJid(packet.getFrom())
                                + "申请加您为好友", AddFriendsActivity.class,packet.getFrom());
                }

            }
        }
    };


文中的XmppConnectionManager.getInstance().getConnection()方法即XMPPConnection对象。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值