環信簡單集成


環信稱自己市場占有第一,這次試着集成環信

 

不過一開始就被坑了,環信的UI組件庫叫做 EaseUI ,這玩意居然只有eclipse的版本,官方文檔說Android Studio導入有問題,要手動改,這一點不如融雲

不過找到了一篇博客,直接新建module復制關鍵文件,終於搞定了

若出現UnsatisfiedLinkError   創建armeabi-v7a,把armeabi里的復制一份放進去

 

聊天3個基本頁面   會話列表頁面,聯系人頁面,聊天頁面 都是Fragment

 

會話列表  ConversationListFragment

initView里面是沒網的時候,顯示在item上面的布局 , 監聽連接是否成功和斷開的方法沒寫

17行  隱藏 標題欄

20行設置了 點擊會話item的事件,拿到EMConversation對象,通過它可以獲取對方的username,會話的類型,把必要的參數交給intent,進入聊天頁面

19行 給列表綁定 onCreateContextMenu 事件,長按就會彈出菜單,onContextItemSelected執行點擊的結果, 類似actionbar的菜單事件

 1 public class ConversationListFragment extends EaseConversationListFragment {
 2 
 3     private TextView errorText;
 4 
 5     @Override
 6     protected void initView() {
 7         super.initView();
 8         View errorView = View.inflate(getActivity(), R.layout.em_chat_neterror_item, null);
 9         errorItemContainer.addView(errorView);
10         errorText = (TextView) errorView.findViewById(R.id.tv_connect_errormsg);
11     }
12 
13 
14     @Override
15     protected void setUpView() {
16         super.setUpView();
17         titleBar.setVisibility(View.GONE);
18         // 注冊上下文菜單
19         registerForContextMenu(conversationListView);
20         conversationListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
21             @Override
22             public void onItemClick(AdapterView<?> adapterView, View view, int pos, long id) {
23                 EMConversation conversation = conversationListView.getItem(pos);
24                 String name = conversation.getUserName();
25                 if (name.equals(EMClient.getInstance().getCurrentUser())) {
26                     Logger.e("不能自己聊");
27                 } else {
28                     Intent intent = new Intent(getActivity(), ChatActivity.class);
29                     if (conversation.isGroup()) {
30                         if (conversation.getType() == EMConversation.EMConversationType.ChatRoom) {
31                             intent.putExtra("type", EaseConstant.CHATTYPE_CHATROOM);
32                         } else {
33                             intent.putExtra("type", EaseConstant.CHATTYPE_GROUP);
34                         }
35                     }
36                     intent.putExtra("id", name);
37                     startActivity(intent);
38                 }
39 
40             }
41         });
42 
43     }
44 
45     @Override
46     public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
47         getActivity().getMenuInflater().inflate(R.menu.conversationlist, menu);
48     }
49 
50     @Override
51     public boolean onContextItemSelected(MenuItem item) {
52         if (item.getItemId() == R.id.delete) {
53             EMConversation tobeDeleteCons = conversationListView.getItem(((AdapterView.AdapterContextMenuInfo) item
54                     .getMenuInfo()).position);
55             String username = tobeDeleteCons.getUserName();
56             //刪除和某個user會話,如果需要保留聊天記錄,傳false
57             EMClient.getInstance().chatManager().deleteConversation(username, true);
58         } else if (item.getItemId() == R.id.test) {
59             Logger.e("test");
60         }
61         return true;
62     }
63 }

 

聊天頁面是activity

10 11 獲取傳入的參數,用然后啟動 EaseChatFragment,直接整個布局容納fragment

主要只要傳如聯系人的id或者群組的id就夠了

 1 public class ChatActivity extends AppCompatActivity {
 2 
 3     private EaseChatFragment chatFragment;
 4 
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         super.onCreate(savedInstanceState);
 8         setContentView(R.layout.activity_chat);
 9         ButterKnife.bind(this);
10         String name=getIntent().getExtras().getString("username");
11         int type=getIntent().getExtras().getInt("type");
12 
13         chatFragment = new EaseChatFragment();
14 
15         Bundle bundle=new Bundle();
16         bundle.putString(EaseConstant.EXTRA_USER_ID,name);
17         bundle.putInt(EaseConstant.EXTRA_CHAT_TYPE,type);
18         chatFragment.setArguments(bundle);
19         getSupportFragmentManager().beginTransaction().add(R.id.container, chatFragment).commit();
20 
21     }
22     @Override
23     public void onBackPressed() {
24         chatFragment.onBackPressed();
25     }
26 }

發送位置這塊,sdk已經做好,但是沒有在AndroidManifest 配置就要報錯了

在module的AndroidManifest  直接寫上

        <activity android:name=".ui.EaseBaiduMapActivity"></activity>

        <!-- 百度地圖所需的service -->
        <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" />
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="3ecea51f560650b1ed8a4b99808f52e8" />

 

 

如果想要實現 點擊頭像,點擊消息框的事件 就要新建一個 fragment 繼承EaseChatFragment  

重寫方法

messageList = (EaseChatMessageList) getView().findViewById(R.id.message_list);
//初始化messagelist
messageList.init(toChatUsername, chatType, null);
//設置item里的控件的點擊事件
messageList.setItemClickListener(new EaseChatMessageList.MessageListItemClickListener() {
     
    @Override
    public void onUserAvatarClick(String username) {
        //頭像點擊事件
    }
     
    @Override
    public void onResendClick(final EMMessage message) {
        //重發消息按鈕點擊事件
    }
     
    @Override
    public void onBubbleLongClick(EMMessage message) {
        //氣泡框長按事件
    }
     
    @Override
    public boolean onBubbleClick(EMMessage message) {
        //氣泡框點擊事件,EaseUI有默認實現這個事件,如果需要覆蓋,return值要返回true
        return false; 
    }
});
//獲取下拉刷新控件
swipeRefreshLayout = messageList.getSwipeRefreshLayout();
//刷新消息列表
messageList.refresh();
messageList.refreshSeekTo(position);
messageList.refreshSelectLast();
View Code

 

聯系人頁面  

值得注意的是 聯系人界面有一些 固定到頂部的item,這里也都封裝好了,在initView里定義好headerview ,找到控件設置點擊事件,再用listview 的addHeaderView

其次要注意的是 聯系人的數據 這個在setUpView中用setContactsMap設置,一般來說都是從服務器獲取,自然就需要加載時間了,可以設置loadingView,再加載數據時顯示,完畢隱藏

 1 public class ContactListFragment extends EaseContactListFragment {
 2 
 3     private View loadingView;
 4     private ContactItemView applicationItem;
 5 
 6 
 7     @Override
 8     protected void initView() {
 9         super.initView();
10         View headerView = LayoutInflater.from(getActivity()).inflate(R.layout.em_contacts_header, null);
11         HeaderItemClickListener listener = new HeaderItemClickListener();
12         applicationItem = (ContactItemView) headerView.findViewById(R.id.application_item);
13         applicationItem.setOnClickListener(listener);
14         headerView.findViewById(R.id.group_item).setOnClickListener(listener);
15         listView.addHeaderView(headerView);
16 
17         //添加正在加載數據提示的loading view
18         loadingView = LayoutInflater.from(getActivity()).inflate(R.layout.em_layout_loading_data, null);
19         contentContainer.addView(loadingView);
20 
21         //注冊上下文菜單
22         registerForContextMenu(listView);
23 
24     }
25 
26     @Override
27     protected void setUpView() {
28         super.setUpView();
29         Map<String, EaseUser> userMap = new HashMap<>();
30         for (int i = 1; i < 20; i++) {
31             EaseUser easeUser = new EaseUser("User " + i);
32             userMap.put(" " + i, easeUser);
33         }
34         setContactsMap(userMap);
35         super.setUpView();
36     }
37 
38 
39     class HeaderItemClickListener implements View.OnClickListener {
40         @Override
41         public void onClick(View view) {
42             switch (view.getId()) {
43                 case R.id.application_item:
44                     Toast.makeText(getActivity(), "application_item", 0).show();
45                     break;
46                 case R.id.group_item:
47                     Toast.makeText(getActivity(), "group_item", 0).show();
48                     break;
49             }
50         }
51     }
52 
53 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM