您的位置:首页 > 其它

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

2017-02-27 17:39 351 查看


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

2015-01-13 16:51 688人阅读 评论(1) 收藏 举报


分类:

android(3)


版权声明:本文为博主原创文章,未经博主允许不得转载。
http://blog.csdn.net/bjh920125/article/details/42678707
从今天开始写日志啦!!!

刚接触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对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐