说到集成sdk 一定是跳官方链接看的,

融云android文档 

不过我想直接看demo了。

融云android官方Demo ,上篇博文有说。

Android 融云SDK 集成_第1张图片


demo 里面的东西,一大堆,其他全部 module

Android 融云SDK 集成_第2张图片

package cn.rongcloud.im;import android.app.ActivityManager;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.net.Uri;import android.support.multidex.MultiDexApplication;import android.text.TextUtils;import android.view.View;import com.facebook.stetho.Stetho;import com.facebook.stetho.dumpapp.DumperPlugin;import com.facebook.stetho.inspector.database.DefaultDatabaseConnectionProvider;import com.facebook.stetho.inspector.protocol.ChromeDevtoolsDomain;import java.util.ArrayList;import java.util.List;import cn.rongcloud.contactcard.ContactCardExtensionModule;import cn.rongcloud.contactcard.IContactCardClickListener;import cn.rongcloud.contactcard.IContactCardInfoProvider;import cn.rongcloud.contactcard.message.ContactMessage;import cn.rongcloud.im.db.Friend;import cn.rongcloud.im.message.TestMessage;import cn.rongcloud.im.message.provider.ContactNotificationMessageProvider;import cn.rongcloud.im.message.provider.TestMessageProvider;import cn.rongcloud.im.server.pinyin.CharacterParser;import cn.rongcloud.im.server.utils.NLog;import cn.rongcloud.im.server.utils.RongGenerate;import cn.rongcloud.im.stetho.RongDatabaseDriver;import cn.rongcloud.im.stetho.RongDatabaseFilesProvider;import cn.rongcloud.im.stetho.RongDbFilesDumperPlugin;import cn.rongcloud.im.ui.activity.UserDetailActivity;import cn.rongcloud.im.utils.SharedPreferencesContext;import io.rong.imageloader.core.DisplayImageOptions;import io.rong.imageloader.core.display.FadeInBitmapDisplayer;import io.rong.imkit.RongExtensionManager;import io.rong.imkit.RongIM;import io.rong.imkit.widget.provider.RealTimeLocationMessageProvider;import io.rong.imlib.ipc.RongExceptionHandler;import io.rong.imlib.model.UserInfo;import io.rong.push.RongPushClient;import io.rong.push.common.RongException;import io.rong.recognizer.RecognizeExtensionModule;public class App extends MultiDexApplication {    private static DisplayImageOptions options;    @Override    public void onCreate() {        super.onCreate();        Stetho.initialize(new Stetho.Initializer(this) {            @Override            protected Iterable getDumperPlugins() {                return new Stetho.DefaultDumperPluginsBuilder(App.this)                        .provide(new RongDbFilesDumperPlugin(App.this, new RongDatabaseFilesProvider(App.this)))                        .finish();            }            @Override            protected Iterable getInspectorModules() {                Stetho.DefaultInspectorModulesBuilder defaultInspectorModulesBuilder = new Stetho.DefaultInspectorModulesBuilder(App.this);                defaultInspectorModulesBuilder.provideDatabaseDriver(new RongDatabaseDriver(App.this, new RongDatabaseFilesProvider(App.this), new DefaultDatabaseConnectionProvider()));                return defaultInspectorModulesBuilder.finish();            }        });        if (getApplicationInfo().packageName.equals(getCurProcessName(getApplicationContext()))) {//            LeakCanary.install(this);//内存泄露检测            RongPushClient.registerHWPush(this);            RongPushClient.registerMiPush(this, "2882303761517473625", "5451747338625");            try {                RongPushClient.registerFCM(this);            } catch (RongException e) {                e.printStackTrace();            }            /**             * 注意:             *             * IMKit SDK调用第一步 初始化             *             * context上下文             *             * 只有两个进程需要初始化,主进程和 push 进程             */            RongIM.setServerInfo("nav.cn.ronghub.com", "up.qbox.me");            RongIM.init(this);            NLog.setDebug(true);//Seal Module Log 开关            SealAppContext.init(this);            SharedPreferencesContext.init(this);            Thread.setDefaultUncaughtExceptionHandler(new RongExceptionHandler(this));            try {                RongIM.registerMessageTemplate(new ContactNotificationMessageProvider());                RongIM.registerMessageTemplate(new RealTimeLocationMessageProvider());                RongIM.registerMessageType(TestMessage.class);                RongIM.registerMessageTemplate(new TestMessageProvider());            } catch (Exception e) {                e.printStackTrace();            }            openSealDBIfHasCachedToken();            options = new DisplayImageOptions.Builder()                    .showImageForEmptyUri(cn.rongcloud.im.R.drawable.de_default_portrait)                    .showImageOnFail(cn.rongcloud.im.R.drawable.de_default_portrait)                    .showImageOnLoading(cn.rongcloud.im.R.drawable.de_default_portrait)                    .displayer(new FadeInBitmapDisplayer(300))                    .cacheInMemory(true)                    .cacheOnDisk(true)                    .build();            //RongExtensionManager.getInstance().registerExtensionModule(new PTTExtensionModule(this, true, 1000 * 60));            RongExtensionManager.getInstance().registerExtensionModule(new ContactCardExtensionModule(new IContactCardInfoProvider() {                @Override                public void getContactAllInfoProvider(final IContactCardInfoCallback contactInfoCallback) {                    SealUserInfoManager.getInstance().getFriends(new SealUserInfoManager.ResultCallback>() {                        @Override                        public void onSuccess(List friendList) {                            contactInfoCallback.getContactCardInfoCallback(friendList);                        }                        @Override                        public void onError(String errString) {                            contactInfoCallback.getContactCardInfoCallback(null);                        }                    });                }                @Override                public void getContactAppointedInfoProvider(String userId, String name, String portrait, final IContactCardInfoCallback contactInfoCallback) {                    SealUserInfoManager.getInstance().getFriendByID(userId, new SealUserInfoManager.ResultCallback() {                        @Override                        public void onSuccess(Friend friend) {                            List list = new ArrayList<>();                            list.add(friend);                            contactInfoCallback.getContactCardInfoCallback(list);                        }                        @Override                        public void onError(String errString) {                            contactInfoCallback.getContactCardInfoCallback(null);                        }                    });                }            }, new IContactCardClickListener() {                @Override                public void onContactCardClick(View view, ContactMessage content) {                    Intent intent = new Intent(view.getContext(), UserDetailActivity.class);                    Friend friend = SealUserInfoManager.getInstance().getFriendByID(content.getId());                    if (friend == null) {                        UserInfo userInfo = new UserInfo(content.getId(), content.getName(),                                Uri.parse(TextUtils.isEmpty(content.getImgUrl()) ? RongGenerate.generateDefaultAvatar(content.getName(), content.getId()) : content.getImgUrl()));                        friend = CharacterParser.getInstance().generateFriendFromUserInfo(userInfo);                    }                    intent.putExtra("friend", friend);                    view.getContext().startActivity(intent);                }            }));            RongExtensionManager.getInstance().registerExtensionModule(new RecognizeExtensionModule());        }    }    public static DisplayImageOptions getOptions() {        return options;    }    private void openSealDBIfHasCachedToken() {        SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);        String cachedToken = sp.getString("loginToken", "");        if (!TextUtils.isEmpty(cachedToken)) {            String current = getCurProcessName(this);            String mainProcessName = getPackageName();            if (mainProcessName.equals(current)) {                SealUserInfoManager.getInstance().openDB();            }        }    }    public static String getCurProcessName(Context context) {        int pid = android.os.Process.myPid();        ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);        for (ActivityManager.RunningAppProcessInfo appProcess : activityManager.getRunningAppProcesses()) {            if (appProcess.pid == pid) {                return appProcess.processName;            }        }        return null;    }}

这里初始化的东西比较多,开始只要知道需要初始化 融云那个就可以了。

package cn.rongcloud.im.ui.activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.content.SharedPreferences;import android.graphics.Color;import android.net.Uri;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.view.ViewPager;import android.text.TextUtils;import android.view.KeyEvent;import android.view.MotionEvent;import android.view.View;import android.view.inputmethod.InputMethodManager;import android.widget.ImageView;import android.widget.RelativeLayout;import android.widget.TextView;import java.util.ArrayList;import java.util.List;import cn.rongcloud.im.R;import cn.rongcloud.im.server.HomeWatcherReceiver;import cn.rongcloud.im.server.broadcast.BroadcastManager;import cn.rongcloud.im.server.utils.NToast;import cn.rongcloud.im.server.widget.LoadDialog;import cn.rongcloud.im.ui.adapter.ConversationListAdapterEx;import cn.rongcloud.im.ui.fragment.ContactsFragment;import cn.rongcloud.im.ui.fragment.DiscoverFragment;import cn.rongcloud.im.ui.fragment.MineFragment;import cn.rongcloud.im.ui.widget.DragPointView;import cn.rongcloud.im.ui.widget.MorePopWindow;import io.rong.common.RLog;import io.rong.imkit.RongContext;import io.rong.imkit.RongIM;import io.rong.imkit.fragment.ConversationListFragment;import io.rong.imkit.manager.IUnReadMessageObserver;import io.rong.imlib.RongIMClient;import io.rong.imlib.model.Conversation;import io.rong.message.ContactNotificationMessage;//import io.rong.toolkit.TestActivity;@SuppressWarnings("deprecation")public class MainActivity extends FragmentActivity implements        ViewPager.OnPageChangeListener,        View.OnClickListener,        DragPointView.OnDragListencer,        IUnReadMessageObserver {    public static ViewPager mViewPager;    private List mFragment = new ArrayList<>();    private ImageView moreImage, mImageChats, mImageContact, mImageFind, mImageMe, mMineRed;    private TextView mTextChats, mTextContact, mTextFind, mTextMe;    private DragPointView mUnreadNumView;    private ImageView mSearchImageView;    /**     * 会话列表的fragment     */    private ConversationListFragment mConversationListFragment = null;    private boolean isDebug;    private Context mContext;    private Conversation.ConversationType[] mConversationsTypes = null;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mContext = this;        isDebug = getSharedPreferences("config", MODE_PRIVATE).getBoolean("isDebug", false);        initViews();        changeTextViewColor();        changeSelectedTabState(0);        initMainViewPager();        registerHomeKeyReceiver(this);    }    private void initViews() {        RelativeLayout chatRLayout = (RelativeLayout) findViewById(R.id.seal_chat);        RelativeLayout contactRLayout = (RelativeLayout) findViewById(R.id.seal_contact_list);        RelativeLayout foundRLayout = (RelativeLayout) findViewById(R.id.seal_find);        RelativeLayout mineRLayout = (RelativeLayout) findViewById(R.id.seal_me);        mImageChats = (ImageView) findViewById(R.id.tab_img_chats);        mImageContact = (ImageView) findViewById(R.id.tab_img_contact);        mImageFind = (ImageView) findViewById(R.id.tab_img_find);        mImageMe = (ImageView) findViewById(R.id.tab_img_me);        mTextChats = (TextView) findViewById(R.id.tab_text_chats);        mTextContact = (TextView) findViewById(R.id.tab_text_contact);        mTextFind = (TextView) findViewById(R.id.tab_text_find);        mTextMe = (TextView) findViewById(R.id.tab_text_me);        mMineRed = (ImageView) findViewById(R.id.mine_red);        moreImage = (ImageView) findViewById(R.id.seal_more);        mSearchImageView = (ImageView) findViewById(R.id.ac_iv_search);        chatRLayout.setOnClickListener(this);        contactRLayout.setOnClickListener(this);        foundRLayout.setOnClickListener(this);        mineRLayout.setOnClickListener(this);        moreImage.setOnClickListener(this);        mSearchImageView.setOnClickListener(this);        BroadcastManager.getInstance(mContext).addAction(MineFragment.SHOW_RED, new BroadcastReceiver() {            @Override            public void onReceive(Context context, Intent intent) {                mMineRed.setVisibility(View.VISIBLE);            }        });    }    private void initMainViewPager() {        Fragment conversationList = initConversationList();        mViewPager = (ViewPager) findViewById(R.id.main_viewpager);        mUnreadNumView = (DragPointView) findViewById(R.id.seal_num);        mUnreadNumView.setOnClickListener(this);        mUnreadNumView.setDragListencer(this);        mFragment.add(conversationList);        mFragment.add(new ContactsFragment());        mFragment.add(new DiscoverFragment());        mFragment.add(new MineFragment());        FragmentPagerAdapter fragmentPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {            @Override            public Fragment getItem(int position) {                return mFragment.get(position);            }            @Override            public int getCount() {                return mFragment.size();            }        };        mViewPager.setAdapter(fragmentPagerAdapter);        mViewPager.setOffscreenPageLimit(4);        mViewPager.setOnPageChangeListener(this);        initData();    }    private Fragment initConversationList() {        if (mConversationListFragment == null) {            ConversationListFragment listFragment = new ConversationListFragment();            listFragment.setAdapter(new ConversationListAdapterEx(RongContext.getInstance()));            Uri uri;            if (isDebug) {                uri = Uri.parse("rong://" + getApplicationInfo().packageName).buildUpon()                        .appendPath("conversationlist")                        .appendQueryParameter(Conversation.ConversationType.PRIVATE.getName(), "true") //设置私聊会话是否聚合显示                        .appendQueryParameter(Conversation.ConversationType.GROUP.getName(), "true")//群组                        .appendQueryParameter(Conversation.ConversationType.PUBLIC_SERVICE.getName(), "false")//公共服务号                        .appendQueryParameter(Conversation.ConversationType.APP_PUBLIC_SERVICE.getName(), "false")//订阅号                        .appendQueryParameter(Conversation.ConversationType.SYSTEM.getName(), "true")//系统                        .appendQueryParameter(Conversation.ConversationType.DISCUSSION.getName(), "true")                        .build();                mConversationsTypes = new Conversation.ConversationType[]{Conversation.ConversationType.PRIVATE,                        Conversation.ConversationType.GROUP,                        Conversation.ConversationType.PUBLIC_SERVICE,                        Conversation.ConversationType.APP_PUBLIC_SERVICE,                        Conversation.ConversationType.SYSTEM,                        Conversation.ConversationType.DISCUSSION                };            } else {                uri = Uri.parse("rong://" + getApplicationInfo().packageName).buildUpon()                        .appendPath("conversationlist")                        .appendQueryParameter(Conversation.ConversationType.PRIVATE.getName(), "false") //设置私聊会话是否聚合显示                        .appendQueryParameter(Conversation.ConversationType.GROUP.getName(), "false")//群组                        .appendQueryParameter(Conversation.ConversationType.PUBLIC_SERVICE.getName(), "false")//公共服务号                        .appendQueryParameter(Conversation.ConversationType.APP_PUBLIC_SERVICE.getName(), "false")//订阅号                        .appendQueryParameter(Conversation.ConversationType.SYSTEM.getName(), "true")//系统                        .build();                mConversationsTypes = new Conversation.ConversationType[]{Conversation.ConversationType.PRIVATE,                        Conversation.ConversationType.GROUP,                        Conversation.ConversationType.PUBLIC_SERVICE,                        Conversation.ConversationType.APP_PUBLIC_SERVICE,                        Conversation.ConversationType.SYSTEM                };            }            listFragment.setUri(uri);            mConversationListFragment = listFragment;            return listFragment;        } else {            return mConversationListFragment;        }    }    @Override    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {    }    @Override    public void onPageSelected(int position) {        changeTextViewColor();        changeSelectedTabState(position);    }    private void changeTextViewColor() {        mImageChats.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_chat));        mImageContact.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_contacts));        mImageFind.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_found));        mImageMe.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_me));        mTextChats.setTextColor(Color.parseColor("#abadbb"));        mTextContact.setTextColor(Color.parseColor("#abadbb"));        mTextFind.setTextColor(Color.parseColor("#abadbb"));        mTextMe.setTextColor(Color.parseColor("#abadbb"));    }    private void changeSelectedTabState(int position) {        switch (position) {            case 0:                mTextChats.setTextColor(Color.parseColor("#0099ff"));                mImageChats.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_chat_hover));                break;            case 1:                mTextContact.setTextColor(Color.parseColor("#0099ff"));                mImageContact.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_contacts_hover));                break;            case 2:                mTextFind.setTextColor(Color.parseColor("#0099ff"));                mImageFind.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_found_hover));                break;            case 3:                mTextMe.setTextColor(Color.parseColor("#0099ff"));                mImageMe.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_me_hover));                break;        }    }    @Override    public void onPageScrollStateChanged(int state) {    }    long firstClick = 0;    long secondClick = 0;    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.seal_chat:                if (mViewPager.getCurrentItem() == 0) {                    if (firstClick == 0) {                        firstClick = System.currentTimeMillis();                    } else {                        secondClick = System.currentTimeMillis();                    }                    RLog.i("MainActivity", "time = " + (secondClick - firstClick));                    if (secondClick - firstClick > 0 && secondClick - firstClick <= 800) {                        mConversationListFragment.focusUnreadItem();                        firstClick = 0;                        secondClick = 0;                    } else if (firstClick != 0 && secondClick != 0) {                        firstClick = 0;                        secondClick = 0;                    }                }                mViewPager.setCurrentItem(0, false);                break;            case R.id.seal_contact_list:                mViewPager.setCurrentItem(1, false);                break;            case R.id.seal_find:                mViewPager.setCurrentItem(2, false);                break;            case R.id.seal_me:                mViewPager.setCurrentItem(3, false);                mMineRed.setVisibility(View.GONE);                break;            case R.id.seal_more:                MorePopWindow morePopWindow = new MorePopWindow(MainActivity.this);                morePopWindow.showPopupWindow(moreImage);                break;            case R.id.ac_iv_search:                startActivity(new Intent(MainActivity.this, SealSearchActivity.class));                break;        }    }    @Override    protected void onNewIntent(Intent intent) {        super.onNewIntent(intent);        if (intent.getBooleanExtra("systemconversation", false)) {            mViewPager.setCurrentItem(0, false);        }    }    protected void initData() {        final Conversation.ConversationType[] conversationTypes = {                Conversation.ConversationType.PRIVATE,                Conversation.ConversationType.GROUP, Conversation.ConversationType.SYSTEM,                Conversation.ConversationType.PUBLIC_SERVICE, Conversation.ConversationType.APP_PUBLIC_SERVICE        };        RongIM.getInstance().addUnReadMessageCountChangedObserver(this, conversationTypes);        getConversationPush();// 获取 push  id  target        getPushMessage();    }    private void getConversationPush() {        if (getIntent() != null && getIntent().hasExtra("PUSH_CONVERSATIONTYPE") && getIntent().hasExtra("PUSH_TARGETID")) {            final String conversationType = getIntent().getStringExtra("PUSH_CONVERSATIONTYPE");            final String targetId = getIntent().getStringExtra("PUSH_TARGETID");            RongIM.getInstance().getConversation(Conversation.ConversationType.valueOf(conversationType), targetId, new RongIMClient.ResultCallback() {                @Override                public void onSuccess(Conversation conversation) {                    if (conversation != null) {                        if (conversation.getLatestMessage() instanceof ContactNotificationMessage) { //好友消息的push                            startActivity(new Intent(MainActivity.this, NewFriendListActivity.class));                        } else {                            Uri uri = Uri.parse("rong://" + getApplicationInfo().packageName).buildUpon().appendPath("conversation")                                    .appendPath(conversationType).appendQueryParameter("targetId", targetId).build();                            Intent intent = new Intent(Intent.ACTION_VIEW);                            intent.setData(uri);                            startActivity(intent);                        }                    }                }                @Override                public void onError(RongIMClient.ErrorCode e) {                }            });        }    }    /**     * 得到不落地 push 消息     */    private void getPushMessage() {        Intent intent = getIntent();        if (intent != null && intent.getData() != null && intent.getData().getScheme().equals("rong")) {            String path = intent.getData().getPath();            if (path.contains("push_message")) {                SharedPreferences sharedPreferences = getSharedPreferences("config", MODE_PRIVATE);                String cacheToken = sharedPreferences.getString("loginToken", "");                if (TextUtils.isEmpty(cacheToken)) {                    startActivity(new Intent(MainActivity.this, LoginActivity.class));                } else {                    if (!RongIM.getInstance().getCurrentConnectionStatus().equals(RongIMClient.ConnectionStatusListener.ConnectionStatus.CONNECTED)) {                        LoadDialog.show(mContext);                        RongIM.connect(cacheToken, new RongIMClient.ConnectCallback() {                            @Override                            public void onTokenIncorrect() {                                LoadDialog.dismiss(mContext);                            }                            @Override                            public void onSuccess(String s) {                                LoadDialog.dismiss(mContext);                            }                            @Override                            public void onError(RongIMClient.ErrorCode e) {                                LoadDialog.dismiss(mContext);                            }                        });                    }                }            }        }    }    @Override    public void onCountChanged(int count) {        if (count == 0) {            mUnreadNumView.setVisibility(View.GONE);        } else if (count > 0 && count < 100) {            mUnreadNumView.setVisibility(View.VISIBLE);            mUnreadNumView.setText(String.valueOf(count));        } else {            mUnreadNumView.setVisibility(View.VISIBLE);            mUnreadNumView.setText(R.string.no_read_message);        }    }    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if (keyCode == KeyEvent.KEYCODE_BACK) {            moveTaskToBack(false);            return true;        }        return super.onKeyDown(keyCode, event);    }    private void hintKbTwo() {        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);        if (imm.isActive() && getCurrentFocus() != null) {            if (getCurrentFocus().getWindowToken() != null) {                imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);            }        }    }    @Override    public boolean onTouchEvent(MotionEvent event) {        if (null != this.getCurrentFocus() && event.getAction() == MotionEvent.ACTION_UP) {            InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);            return mInputMethodManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 0);        }        return super.onTouchEvent(event);    }    @Override    protected void onDestroy() {        RongIM.getInstance().removeUnReadMessageCountChangedObserver(this);        if (mHomeKeyReceiver != null)            this.unregisterReceiver(mHomeKeyReceiver);        super.onDestroy();    }    @Override    public void onDragOut() {        mUnreadNumView.setVisibility(View.GONE);        NToast.shortToast(mContext, getString(R.string.clear_success));        RongIM.getInstance().getConversationList(new RongIMClient.ResultCallback>() {            @Override            public void onSuccess(List conversations) {                if (conversations != null && conversations.size() > 0) {                    for (Conversation c : conversations) {                        RongIM.getInstance().clearMessagesUnreadStatus(c.getConversationType(), c.getTargetId(), null);                    }                }            }            @Override            public void onError(RongIMClient.ErrorCode e) {            }        }, mConversationsTypes);    }    private HomeWatcherReceiver mHomeKeyReceiver = null;    //如果遇见 Android 7.0 系统切换到后台回来无效的情况 把下面注册广播相关代码注释或者删除即可解决。下面广播重写 home 键是为了解决三星 note3  home 键花屏的一个问题    private void registerHomeKeyReceiver(Context context) {        if (mHomeKeyReceiver == null) {            mHomeKeyReceiver = new HomeWatcherReceiver();            final IntentFilter homeFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);            try {                context.registerReceiver(mHomeKeyReceiver, homeFilter);            } catch (Exception e) {                e.printStackTrace();            }        }    }}
Android 融云SDK 集成_第3张图片

viewpager 控件,加载了4个fragment。

Android 融云SDK 集成_第4张图片

分别对应,会话,通讯录,发现,我的。

Android 融云SDK 集成_第5张图片

全局有对广播的封装。

    BroadcastManager.

/*    ShengDao Android Client, BroadcastManager    Copyright (c) 2015 ShengDao Tech Company Limited*/package cn.rongcloud.im.server.broadcast;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import java.util.HashMap;import java.util.Map;import cn.rongcloud.im.server.network.async.AsyncTaskManager;import cn.rongcloud.im.server.network.http.HttpException;import cn.rongcloud.im.server.utils.json.JsonMananger;/** * [A brief description] * 

* //在任何地方发送广播 * BroadcastManager.getInstance(mContext).sendBroadcast(FindOrderActivity.ACTION_RECEIVE_MESSAGE); *

* //页面在oncreate中初始化广播 * BroadcastManager.getInstance(mContext).addAction(ACTION_RECEIVE_MESSAGE, new BroadcastReceiver(){ * * @author huxinwu * @version 1.0 * @Override public void onReceive(Context arg0, Intent intent) { * String command = intent.getAction(); * if(!TextUtils.isEmpty(command)){ * if((ACTION_RECEIVE_MESSAGE).equals(command)){ * //获取json结果 * String json = intent.getStringExtra("result"); * //做你该做的事情 * } * } * } * }); *

* //页面在ondestory销毁广播 * BroadcastManager.getInstance(mContext).destroy(ACTION_RECEIVE_MESSAGE); * @date 2015-9-17 **/public class BroadcastManager { private Context mContext; private static BroadcastManager instance; private Map receiverMap; /** * 构造方法 * * @param context */ private BroadcastManager(Context context) { this.mContext = context.getApplicationContext(); receiverMap = new HashMap(); } /** * [获取BroadcastManager实例,单例模式实现] * * @param context * @return */ public static BroadcastManager getInstance(Context context) { if (instance == null) { synchronized (AsyncTaskManager.class) { if (instance == null) { instance = new BroadcastManager(context); } } } return instance; } /** * 添加 * * @param */ public void addAction(String action, BroadcastReceiver receiver) { try { IntentFilter filter = new IntentFilter(); filter.addAction(action); mContext.registerReceiver(receiver, filter); receiverMap.put(action, receiver); } catch (Exception e) { e.printStackTrace(); } } /** * 发送广播 * * @param action 唯一码 */ public void sendBroadcast(String action) { sendBroadcast(action, ""); } /** * 发送广播 * * @param action 唯一码 * @param obj 参数 */ public void sendBroadcast(String action, Object obj) { try { Intent intent = new Intent(); intent.setAction(action); intent.putExtra("result", JsonMananger.beanToJson(obj)); mContext.sendBroadcast(intent); } catch (HttpException e) { e.printStackTrace(); } } /** * 发送参数为 String 的数据广播 * * @param action * @param s */ public void sendBroadcast(String action, String s) { Intent intent = new Intent(); intent.setAction(action); intent.putExtra("String", s); mContext.sendBroadcast(intent); } /** * 销毁广播 * * @param action */ public void destroy(String action) { if (receiverMap != null) { BroadcastReceiver receiver = receiverMap.remove(action); if (receiver != null) { mContext.unregisterReceiver(receiver); } } }}

private Map receiverMap;

1  单例模式  。

2 desroty 时候移走。

Android 融云SDK 集成_第6张图片

Android 融云SDK 集成_第7张图片

 用法就是 先调用 sendBroadcast ,然后处理。比较方便。

然后看第一个fragment

private Fragment initConversationList() {    if (mConversationListFragment == null) {        ConversationListFragment listFragment = new ConversationListFragment();        listFragment.setAdapter(new ConversationListAdapterEx(RongContext.getInstance()));        Uri uri;        if (isDebug) {            uri = Uri.parse("rong://" + getApplicationInfo().packageName).buildUpon()                    .appendPath("conversationlist")                    .appendQueryParameter(Conversation.ConversationType.PRIVATE.getName(), "true") //设置私聊会话是否聚合显示                    .appendQueryParameter(Conversation.ConversationType.GROUP.getName(), "true")//群组                    .appendQueryParameter(Conversation.ConversationType.PUBLIC_SERVICE.getName(), "false")//公共服务号                    .appendQueryParameter(Conversation.ConversationType.APP_PUBLIC_SERVICE.getName(), "false")//订阅号                    .appendQueryParameter(Conversation.ConversationType.SYSTEM.getName(), "true")//系统                    .appendQueryParameter(Conversation.ConversationType.DISCUSSION.getName(), "true")                    .build();            mConversationsTypes = new Conversation.ConversationType[]{Conversation.ConversationType.PRIVATE,                    Conversation.ConversationType.GROUP,                    Conversation.ConversationType.PUBLIC_SERVICE,                    Conversation.ConversationType.APP_PUBLIC_SERVICE,                    Conversation.ConversationType.SYSTEM,                    Conversation.ConversationType.DISCUSSION            };        } else {            uri = Uri.parse("rong://" + getApplicationInfo().packageName).buildUpon()                    .appendPath("conversationlist")                    .appendQueryParameter(Conversation.ConversationType.PRIVATE.getName(), "false") //设置私聊会话是否聚合显示                    .appendQueryParameter(Conversation.ConversationType.GROUP.getName(), "false")//群组                    .appendQueryParameter(Conversation.ConversationType.PUBLIC_SERVICE.getName(), "false")//公共服务号                    .appendQueryParameter(Conversation.ConversationType.APP_PUBLIC_SERVICE.getName(), "false")//订阅号                    .appendQueryParameter(Conversation.ConversationType.SYSTEM.getName(), "true")//系统                    .build();            mConversationsTypes = new Conversation.ConversationType[]{Conversation.ConversationType.PRIVATE,                    Conversation.ConversationType.GROUP,                    Conversation.ConversationType.PUBLIC_SERVICE,                    Conversation.ConversationType.APP_PUBLIC_SERVICE,                    Conversation.ConversationType.SYSTEM            };        }        listFragment.setUri(uri);        mConversationListFragment = listFragment;        return listFragment;    } else {        return mConversationListFragment;    }}

会话列表fragment ,有动态创建,和静态创建,静态创建就是用官方的那个

Android 融云SDK 集成_第8张图片

然Demo 里面的是自定义创建的。

Android 融云SDK 集成_第9张图片

会话 有几种不同类型:

true 就是 显示出来,false 就不显示。

这里的会话列表这个,一般用官方的就可以了。

接下来 

Android 融云SDK 集成_第10张图片

这里有个未读消息监听,Android 融云SDK 集成_第11张图片

对应这个东西。

Android 融云SDK 集成_第12张图片

实现这个方法。

Android 融云SDK 集成_第13张图片

目测就是显示小红点。

未读消息监听要移除监听。。。。。 destory 里面有个取消方法。



Android 融云SDK 集成_第14张图片

小红点 阅读了消息后,就是已读消息,调用方法。 MainActivity 基本就是这样了,。。。。。。。


更多相关文章

  1. Android消息处理系统
  2. Android有效解决加载大图片时内存溢出的问题
  3. Android 图片加载图片_OOM异常解决
  4. android实现服务器图片本地缓存
  5. 转 Android的消息处理机制
  6. Android SeekBar自定义使用图片和颜色显示
  7. RecyclerView item imageview 图片宽高自适应
  8. Android 微信分享,微信分享图片

随机推荐

  1. Android 改变标题栏的背景色
  2. [置顶] Android 百度地图 简单实现--- 美
  3. android 最火的开源项目
  4. android 中定时器的几种用法总结
  5. android > WebView > 布局
  6. virtualbox 安装android设置分辨率(自定
  7. android中MediaPlayer的用法
  8. 原:Android(安卓)获取屏幕高度、标题高度
  9. Android使用AchartEngine绘制曲线图
  10. android:TextAppearance.Material.Widget