Android asmack 简单功能的实现

大家搜到这篇文章应该在架设openfire+asmack的及时消息服务吧


算了。写到一半发现东西比较多,大家直接拿demo吧,主要看看里面的ConnectManager类

点我下载———点我下载



这里简单列出几个函数的实现


1:登录

public static ConnectionConfiguration connConfig;
	public static XMPPConnection xmppConnection;
	//函数传入的参数为,openfire IP,端口一般为5222,用户名,密码,
	//以及含域名的用户名,如admin@xmpptest
	public static void Login(final String ServerIP, final int serverport,
			final String Username, final String Password, String userid) {
	
		connConfig = new ConnectionConfiguration(ServerIP, serverport);
		connConfig.setSASLAuthenticationEnabled(false);
		xmppConnection = new XMPPConnection(connConfig); //设定connection配置
		new Thread() {
			@Override
			public void run() {
				try {
					xmppConnection.connect();
					xmppConnection.login(Username, Password);  //登录
				} catch (Exception ex) {
				}
			}
		}.start();
	}

登录完了以后便是收发消息


2:接收一对一的对话(不含群组会话)

public static Chat chat;
	public static ChatManager chatManager;
	// 注册单人对话监听
	protected static void RegisterMessageListener() {
		chatManager = xmppConnection.getChatManager();
		chatManager.addChatListener(new ChatManagerListener() {

			public void chatCreated(Chat chat, boolean arg1) { 
				chat.addMessageListener(new MessageListener() {  //通过添加一个messaagelitener 来接收消息
					public void processMessage(Chat arg0, Message message) {
						String msg = message.getBody();  //消息主体
						sendhandlemsg(message.getFrom(), msg, false);
					}
				});

			}
		});
	}


3:发送一对一的对话

	public static void semdmessage(final String msg, final String msgto) {

		// 初始化发送消息,chatManager在前文初始化过
		chat = chatManager.createChat(msgto, null);
		new Thread() {
			@Override
			public void run() {
				try {
					//消息发送出去
					chat.sendMessage(msg);
					sendhandlemsg(User, msg, true);
				} catch (XMPPException e) {
					e.printStackTrace();
				}
			}
		}.start();
	}

接下来是加入房间

代码比较多,前两段是查找房间,并储存在一个map中,第三段是加入

4:加入房间

	// 获取房间列表的adpter,当然也可以直接返回list
	public static RoomListAdapter GetRoomAdapter() {
		RoomListAdapter adapter;
		//储存系统最上层的房间名称
		List<Map<String, String>> groups = new ArrayList<Map<String, String>>(); // 一级目录组
		//储存系统最上层房间名称,及其子房间的名称与jid
		List<List<Map<String, String>>> childs = new ArrayList<List<Map<String, String>>>(); // 二级目录组

		Map<String, String> group;
		try {
			//第一次第二个参数为空,可以获取到系统最上层的房间,包括公共房间等
			//但是此时获取的房间是不能加入的
			Collection<HostedRoom> ServiceCollection = MultiUserChat
					.getHostedRooms(xmppConnection, "");
			//遍历讲上文获取到的房间的Jid传入第二个参数,从而获取子房间
			//此时获取的房间便能加入
			for (HostedRoom s : ServiceCollection) {
				group = new HashMap<String, String>();
				group.put("group", s.getName());
				groups.add(group);

				childs.add(GetRoomFromServers(s.getJid()));
			}

		} catch (XMPPException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		adapter = new RoomListAdapter(groups, childs, activity);
		return adapter;
	}

	// 根据服务器获取房间列表
	private static List<Map<String, String>> GetRoomFromServers(String jid) {
		List<Map<String, String>> resultList = new ArrayList<Map<String, String>>();
		Map<String, String> result;

		try {
			Collection<HostedRoom> ServiceCollection = MultiUserChat
					.getHostedRooms(xmppConnection, jid);

			for (HostedRoom s : ServiceCollection) {
				result = new HashMap<String, String>();
				result.put("child", s.getName());
				result.put("childid", s.getJid());
				resultList.add(result);
			}

		} catch (XMPPException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return resultList;
	}

	// 加入一个房间
	public static void JoinRoom(String jid) {
		MultiUserChat multiUserChat = new MultiUserChat(xmppConnection, jid);
		curmultchat = multiUserChat;
		try {
			multiUserChat.join(User); //user为你传入的用户名
			RegisterRoomMessageListener();
		} catch (XMPPException e) {

			e.printStackTrace();
		}
	}

此时你便能在服务器的房间列表中看到你登录的用户了,

然后便是房间内消息的收发

房间发送消息与单人发送消息的方法一致

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Android的NFC(近场通信)功能可以通过以下简单的步骤来实现。 首先,确保你的Android设备支持NFC功能。大多数现代Android设备都已经内置了NFC芯片。 接下来,在你的Android应用程序中添加必要的权限。在AndroidManifest.xml文件中添加以下权限: ```xml <uses-permission android:name="android.permission.NFC" /> ``` 然后,在你的MainActivity类中添加以下代码来检查设备是否支持NFC功能: ```java NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this); if (nfcAdapter == null) { // 设备不支持NFC } else { // 设备支持NFC } ``` 接下来,你可以在你的应用程序中监听NFC事件。首先,在AndroidManifest.xml文件中添加一个.intent-filter元素,以便你的应用可以接收到NFC相关的Intent: ```xml <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http" /> </intent-filter> ``` 然后,在你的MainActivity类中重写onNewIntent方法,以便在设备接收到NFC标签时进行处理: ```java @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) { // 处理NFC标签数据 } } ``` 最后,你可以使用NFC相关的API来读取和写入NFC标签的数据。例如,你可以使用以下代码来读取NFC标签的文本数据: ```java Parcelable[] rawMessages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); if (rawMessages != null) { NdefMessage[] messages = new NdefMessage[rawMessages.length]; for (int i = 0; i < rawMessages.length; i++) { messages[i] = (NdefMessage) rawMessages[i]; } NdefRecord record = message[0].getRecords()[0]; String textData = new String(record.getPayload()); // 处理文本数据 } ``` 通过以上步骤,你可以在你的Android应用程序中简单实现NFC功能。你可以根据自己的需求扩展这些代码,例如添加写入NFC标签数据的功能或处理其他类型的NFC标签。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值