Asmack长链接框架使用

来源:互联网 发布:淘宝8.8 编辑:程序博客网 时间:2024/06/13 11:11

研究了半天才搞懂这么个东西怎么用,贴上,方便大家使用:

贴上Asmack框架地址

下载后解压,里面有帮助文档及框架源码,点击解压后的“asmack-sr”文件夹复制里面的内容到自己的项目src中,导入后如果有两个文件暴错,检查目标编译版本是否过高,本人使用4.2.2

new出个application类,注意注册哦!!另,请加上intent权限,代码:

public class MyApplication extends Application {
public static XMPPConnection xmppConnection;
public static MultiUserChat multiUserchat;
public void onCreate() {
super.onCreate();
new Thread() {
public void run() {
try {
// 设置服务器信息,参数分别为:服务器ip,端口,服务器房间
ConnectionConfiguration configuration = new ConnectionConfiguration(
"172.16.4.95", 5222, "vico.com");
xmppConnection = new XMPPConnection(configuration);
xmppConnection.connect();
// 使用注册好的Openfire账号登录服务器
xmppConnection.login("vico", "123");
Log.d("tedu", "登录结果" + xmppConnection.isAuthenticated());
// 进到群Multi多
String room = "vico@conference.vico.com";
multiUserchat = new MultiUserChat(
xmppConnection, room);
multiUserchat.join("code-vico-come-in");
multiUserchat.sendMessage("能看到我从android发的内容吗");
} catch (Exception e) {
e.printStackTrace();
}
};
}.start();
};
}

贴上OpenFire服务器链接:

OpenFire服务器(由于上传较慢,下次补上)

部分详节就不详细说明了

接下来写上mainactivity,代码:

ublic class MainActivity extends Activity implements View.OnClickListener {


private EditText etInputtext;
private Button btnSendMessgae;
private Button btnSendImage;
private LinearLayout llContent;
private Handler handler = new Handler();
private ScrollView scrollView;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setViews();
setlisteners();
setPacketInfo();


}
// 2.4 让框架中的接口指向实现类
private void setPacketInfo() {
MyPacketListener packet = new MyPacketListener();
MyApplication.xmppConnection.addPacketListener(packet, null);
}


private void setlisteners() {
btnSendMessgae.setOnClickListener(this);
btnSendImage.setOnClickListener(this);
}
private void setViews() {
etInputtext = (EditText) findViewById(R.id.etInputtext);
btnSendImage = (Button) findViewById(R.id.btnSendImage);
btnSendMessgae = (Button) findViewById(R.id.btnSendMessage);
llContent = (LinearLayout) findViewById(R.id.llContent);
scrollView = (ScrollView) findViewById(R.id.scrollView1);


}
// 监听消息实现类
class MyPacketListener implements PacketListener {


@Override
public void processPacket(Packet packet) {
// String objectInfo = packet.toString();
// Log.d("tedu", "objectInfo -> "+objectInfo);
// String data = packet.toXML();
// Log.d("tedu", "packet.toXML() -> "+data);
if (packet instanceof Message) {
Message msg = (Message) packet;
final String from = msg.getFrom();
final String body = msg.getBody();
Log.d("tedu", "from) -> " + from);
if (MainActivity.this != null) {
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {


if (!(body == null || from == null)) {
// 如果内容字符串以image开头,则表示传的是图片
if (body.startsWith("image")) {
String image = body.substring(5);
byte[] image_byte = Base64.decode(image,
Base64.DEFAULT);
Bitmap bm = BitmapFactory.decodeByteArray(
image_byte, 0, image_byte.length);
ImageView imageView = new ImageView(
MainActivity.this);
imageView.setImageBitmap(bm);
llContent.addView(imageView);
} else {
TextView tv = new TextView(
MainActivity.this);
tv.setText(from.substring(from
.lastIndexOf("/") + 1)
+ " : "
+ body);
tv.setTextColor(Color.BLUE);
tv.setTextSize(20);
llContent.addView(tv);
}


}
handler.post(new Runnable() {
@Override
public void run() {
scrollView
.fullScroll(ScrollView.FOCUS_DOWN);
}
});


}
});
}
}
}


}


@Override
public void onClick(View v) {
switch (v.getId()) {
// 点击发送消息
case R.id.btnSendMessage:
String content = etInputtext.getText().toString();
if (!("".equals(content))) {
try {
MyApplication.multiUserchat.sendMessage(content);
} catch (XMPPException e) {
e.printStackTrace();
}
} else {
Toast.makeText(this, "不能发送空消息", Toast.LENGTH_SHORT).show();
}
break;
// 点击发送图片
case R.id.btnSendImage:
// 获得sd卡路径
String sdcard_root = Environment.getExternalStorageDirectory()
.getAbsolutePath();
// 这里先固定一张sd卡上的图片了
String file_patch = sdcard_root + "/ic_launcher.png";
try {
// 使用文件流拿 到图片的byte[]
FileInputStream inputStream = new FileInputStream(file_patch);
// 获得数据大小
int available = inputStream.available();
byte[] data = new byte[available];
// 将图片文件流转入到data
inputStream.read(data);
inputStream.close();
// 将文件流通过 byte数组转成字符串,使用base64在ipone上也能用
String StringData = Base64.encodeToString(data, Base64.DEFAULT);
// 将字符串的文件信息发送出去,前面带image方便接收时判断信息
MyApplication.multiUserchat.sendMessage("image" + StringData);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (XMPPException e) {
e.printStackTrace();
}
break;
}


}


}


0 0
原创粉丝点击