要想实现聊天,需要在极光推送创建应用,开发者控制台,前往极光推送。
在开发者服务下面选择极光IM,查看相关文档来配置,获取应用密匙。
获得密匙以后,可以集成相关sdk。
这些文档内容的东西就不细说了,集成完毕后到开发指南里面可以进行代码实战。
先来完成聊天布局的设置:
发送方消息在右侧,而接收到的消息在左侧。整体是LinearLayout,通过发送或接收数
据来标识显示哪部分,隐藏哪部分。
ListView布局的xml代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp" >
<LinearLayout
android:id="@+id/left_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:gravity="center"
android:background="@drawable/message_left" >
<TextView
android:id="@+id/left_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:textColor="#fff" />
</LinearLayout>
<LinearLayout
android:id="@+id/right_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:gravity="center"
android:background="@drawable/message_right" >
<TextView
android:id="@+id/right_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp" />
</LinearLayout>
</LinearLayout>
需要自定义Adapter,创建Message类,只有内容和接收类别两个属性。
Myadapter:
package com.example.facetoyou;
import java.util.List;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MyAdapter extends BaseAdapter {
private MainActivity main;
private List<Message> datas;
public MyAdapter(MainActivity main, List<Message> datas) {
super();
this.main = main;
this.datas = datas;
}
public MyAdapter() {
super();
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return datas.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return datas.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View v=null;
Message message=datas.get(position);
ViewHolder vh=null;
if(convertView==null)
{
vh=new ViewHolder();
v=main.getLayoutInflater().inflate(R.layout.item_listview, null);
vh.leftlayout=(LinearLayout) v.findViewById(R.id.left_layout);
vh.rightlayout=(LinearLayout) v.findViewById(R.id.right_layout);
vh.lefttext=(TextView) v.findViewById(R.id.left_msg);
vh.righttext=(TextView) v.findViewById(R.id.right_msg);
v.setTag(vh);
}
else
{
v=convertView;
vh=(ViewHolder) v.getTag();
}
if(message.getType()==Message.TYPE_RECEIVED)
{
vh.rightlayout.setVisibility(View.GONE);
vh.lefttext.setText(message.getContent());
}else if(message.getType()==Message.TYPE_SEND)
{
vh.leftlayout.setVisibility(View.GONE);
vh.righttext.setText(message.getContent());
}
return v;
}
private static class ViewHolder
{
LinearLayout leftlayout,rightlayout;
TextView lefttext,righttext;
}
}
根据文档的开发指南可以进行下一步(实现简单的两个人聊天):
1、SDK的初始化工作一般都放在Application中。
public class MyApplication extends Application {
private static MyApplication instance;
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
instance = this;
JMessageClient.setDebugMode(true);
JMessageClient.init(this);
}
public static MyApplication getInstance() {
return instance;
}
}
2、之后是注册与登录
private void initRegister() {
// TODO Auto-generated method stub
//前两个参数是用户名和密码
JMessageClient.register("xiaoer", "xiaoer", new BasicCallback() {
@Override
public void gotResult(int arg0, String arg1) {
// TODO Auto-generated method stub
//登陆
JMessageClient.login("xiaoer", "xiaoer", new BasicCallback() {
@Override
public void gotResult(int arg0, String arg1) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "欢迎xiaoer", 1).show();
//创建与对方pelon的会话, Conversation.createSingleConversation("pelon");
JMessageClient.getSingleConversation("pelon");
}
});
}
});
}
3、消息的发送
String content=edit.getText().toString().trim();
cn.jpush.im.android.api.model.Message msg = JMessageClient.createSingleTextMessage("pelon", content);
datas.add(new Message(content, 1));
JMessageClient.sendMessage(msg);
//ListView 自动下滑
list.smoothScrollToPosition(list.getCount());
adapter.notifyDataSetChanged();
edit.setText("");
4、消息的接收
需要设置监听:
JMessageClient.registerEventReceiver(this);
手动添加方法:
public void onEventMainThread(MessageEvent event){
//do your own business
cn.jpush.im.android.api.model.Message msg = event.getMessage();
TextContent textcontent=(TextContent) msg.getContent();
String content=textcontent.getText();
datas.add(new Message(content, 0));
list.smoothScrollToPosition(list.getCount());
adapter.notifyDataSetChanged();
}
这样的效果大体就达成了。