实现基于OPhone 2.0的GTalk客户端
2010-10-19 20:56:29 来源:WEB开发网return linearLayout;
}
}
在ContactsAdapter类中涉及到一个Contact类,该类表示联系人的信息,代码如下:
public static class Contact
{
public int iconResourceId;
public String account;
public String nickname;
}
下面的代码创建了ContactsAdapter对象,并将ContactsAdapter对象绑定到ListView组件中。
复制到剪贴板 Java代码
mContactsAdapter = new ContactsAdapter(this);
mlvContacts.setAdapter(mContactsAdapter);
其中mContactsAdapter为ContactsAdapter类型的变量。mlvContacts为ListView类型的变量。
监听联系人是否上线
当某个联系人上线或离线时,GTalk服务端会通知联系人的所有好友。这时Asmack可以通过RosterEntry类的 addRosterListener方法添加监听联系人状态的事件,但经过测试,目前的Asmack版本无法调用该事件方法。所以我们还不能使用该事件来监听联系人的状态。
除了使用监听事件外,还可以使用下面的代码来获得联系人的在线/离线状态。
在调用getPresence方法时要注意,该方法是异步执行的,也就是说,在登录后立刻调用该方法,并不一定返回正确的联系人状态。为此,我们采用了在线程中每隔一定时间调用getPresence的方式来获得联系人的状态。在这里使用了UpdateContactState作为线程类,在该类中每隔 5秒调用一次contactStateChange事件方法,并在该方法中调用getPresence以获得联系人信息。 UpdateContactState类的代码如下:
复制到剪贴板 Java代码
package net.blogjava.mobile.gtalk;
import android.os.Handler;
public class UpdateContactState implements Runnable
{
public boolean flag = true;
private OnContactStateListener mOnContactStateListener;
private Handler handler = new Handler()
{
@Override
public void handleMessage(android.os.Message msg)
{
if (mOnContactStateListener != null)
// 调用contactStateChange事件方法
mOnContactStateListener.contactStateChange();
赞助商链接