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

融云android文档 

不过我想直接看demo了。

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



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


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();            }        }    }}

viewpager 控件,加载了4个fragment。


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


全局有对广播的封装。

    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 时候移走。



 用法就是 先调用 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 ,有动态创建,和静态创建,静态创建就是用官方的那个



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


会话 有几种不同类型:

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

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

接下来 


这里有个未读消息监听,

对应这个东西。


实现这个方法。


目测就是显示小红点。

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




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


更多相关文章

  1. Android开机启动流程
  2. Android(安卓)BroadcastReceiver 简介
  3. android Standard Broadcast Actions 的对比和锁屏前后的测试
  4. android framework java层服务 分析
  5. android之实现各个组件点击事件处理
  6. Android(安卓)FFMPEG音视频开发(四)
  7. android桌面快捷方式添加 删除 更新 自动运行
  8. android kernel 初始化 1
  9. ch024 Android(安卓)BroadCastReceiver

随机推荐

  1. Android CountDownTimer实现定时器和倒计
  2. Android(安卓)8.1 中Systemui中的常见修
  3. MaterialDesign系列文章(六)沉浸式状态栏
  4. 免费的Android(安卓)UI库及组件推荐
  5. 定制Android的Home
  6. Android 中文API (61) ―― ViewSwitcher
  7. 设置Activity全屏
  8. android的九宫格式实现
  9. android 动画之Scroller
  10. Framework学习(三)SystemServer进程