Roster roster = LoginToolUtil.getInstance().getConnection().getRoster();
			Presence presence = roster.getPresence("user@domin");
			
			if (presence.getType() == Presence.Type.available) {//离线
				Log.v(TAG, "User is online");

//以上方法没有用

package com.sms.util;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import com.sms.activity.StartActivity;

import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;

public class UserIsOnlineTool extends AsyncTask<String, Object, Short>{
	private SmSEntity chatEntity = null;
	private Context context = null;
	private static final String IsOnlie_ACTION = "com.sms.action.ISONLINE";
	
	public UserIsOnlineTool(SmSEntity chatEntity, Context context)
	{
		this.chatEntity = chatEntity;
		this.context = context;
	}
	@Override
	protected void onPostExecute(Short result) {
		Log.e("m_debug", result.toString());
		Bundle bundle = new Bundle();
		bundle.putShort("isOnline", result);
		bundle.putSerializable("sms", this.chatEntity);
		
		Intent intent = new Intent(IsOnlie_ACTION);
		intent.putExtras(bundle);
		context.sendBroadcast(intent);
		
		super.onPostExecute(result);
	}

	@Override
	protected void onPreExecute() {
		super.onPreExecute();
	}

	@Override
	protected void onProgressUpdate(Object... values) {
		super.onProgressUpdate(values);
	}

	/**
	 * 判断openfire用户的状态
	 *    strUrl : url格式 - http://my.openfire.com:9090/plugins/presence/status?jid=user1@my.openfire.com&type=xml
	 *    返回值 : 0 - 用户不存在; 1 - 用户在线; 2 - 用户离线
	 *  说明   :必须要求 openfire加载 presence 插件,同时设置任何人都可以访问
	 */
	@Override
	protected Short doInBackground(String... arg0) {
		String url = arg0[0];
		Log.v("m_debug", url);
		 short shOnLineState = 0; //-不存在-
		 try
		    {
		       URL oUrl = new URL(url);
		       URLConnection oConn = oUrl.openConnection();
		       InputStream inputStream = oConn.getInputStream();
		    if(oConn!=null)
		    {
		    	Log.v("m_debug", "--------------------");
		        BufferedReader oIn = new BufferedReader(new InputStreamReader(inputStream));
		        Log.v("m_debug", "--------------------");
		        if(null!=oIn)
		        {
		            String strFlag = oIn.readLine();
		            Log.e("m_debug", strFlag);
		            oIn.close();
		            if(strFlag.indexOf("type=\"unavailable\"")>=0)
		            {
		                shOnLineState = 2;
		            }
		            if(strFlag.indexOf("type=\"error\"")>=0)
		            {
		                shOnLineState = 0;
		            }
		            else if(strFlag.indexOf("priority")>=0 || strFlag.indexOf("id=\"")>=0)
		            {
		                shOnLineState = 1;
		            }
		        }
		    }
		    }
		    catch(Exception e)
		    {
		    	Log.e("m_debug", "错误:" + e.toString());
		    }
		return shOnLineState;
	}
}

AsyncTask的妙用  相当于封装好的Runable

posted on 2013-02-21 20:02  纯洁的坏蛋  阅读(601)  评论(0编辑  收藏  举报