ThinkPHP微的H5聊天室即时通讯系统APP源码分享

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThinkPHP微的H5聊天室即时通讯系统APP源码分享相关的知识,希望对你有一定的参考价值。

参考技术A Thinkphp内核聊天室即时通讯系统源码是一款类似微信的H5聊天系统APP源码 。

源码功能:

消息提醒:有新的消息可以提醒(数字提醒、声音提醒)。

聊天列表:显示最近所有的聊天列表,点击列表某一项可以打开聊天窗口;还可以删除聊天列表项。

聊天窗口:可以发生文字消息、图片消息、表情;图片可以预览。

站内公告:在顶部显示可以及时显示后台发布的公告。

添加朋友:可以搜索对方的帐号名称然后添加到通讯录;添加前需要好友验证才能通过。

群聊:显示群聊信息。

列表:根据字母分组显示联系人;点击联系人可以查看详情资料;可以删除联系人。

游戏:可添加你的官方网站或者游戏网站其它~自定义嵌入第三方网站

个人信息:显示头像、昵称、帐号;可以修改头像和昵称。

修改密码:可以修改登录密码。

朋友圈:可以发动态。

各种源码每天更新,还有各种破解软件、破解游戏、福利写真图哦~

网址 www.xqwym.com

即时聊天APP - MainActivity

主活动包含三个Fragment,分别是会话、联系人和设置,初始布局隐藏所有碎片,然后把应该显示的显示出来:

//隐藏所有Fragment
private void hideAll(){
    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ft.hide(first)
            .hide(second)
            .hide(third)
            .commit();
}
//初始化布局
private void init() {
    textView = findViewById(R.id.common_actionbar);
    textView.setOnClickListener(this);
    textView.setText("会话");
}
//初始化Fragment
private void initFragment() {
    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    first = new Conversationlist();
    second = new Friends();
    third = new My();
    ft.add(R.id.fragment,first);
    ft.add(R.id.fragment,second);
    ft.add(R.id.fragment,third);
    hideAll();
    //判断当前显示界面
    if(Tips.current == 0 || Tips.current == 1){
        ft.show(first);
        textView.setText("会话");
    }else if(Tips.current == 2){
        ft.show(second);
        textView.setText("联系人");
    }else {
        ft.show(third);
        textView.setText("设置");
    }
    ft.commit();
}  

接下来连接服务器,这里我放置了一个线程,每隔1秒检查检查一次是否连接成功:

//连接服务器
private void connect() {
    //检查网络连接
    if(!NetWork.isNetConnection(this)){
        Toast.makeText(this,"无网络连接!",Toast.LENGTH_SHORT).show();
        isConnect = false;
    }else{
        //每秒检查是否连接
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                if(!isConnected())
                    isConnect = false;
                else
                    isConnect = true;
            }
        }, 300,1000);
        try {
            if (!isConnect) {
                if (Tips.MainActivity_fail == 0) {
                    Toast.makeText(MainActivity.this, "服务器连接失败!正在重试...", Toast.LENGTH_SHORT).show();
                    Tips.MainActivity_fail = 1;
                    Tips.MainActivity_success = 0;
                }
                BmobIM.connect(MyUser.getUni(), new ConnectListener() {
                    @Override
                    public void done(String s, BmobException e) {
                        if (e == null) {
                            isConnect = true;
                            retry = 0;
                            if (Tips.MainActivity_success == 0) {
                                Toast.makeText(MainActivity.this, "服务器连接成功!", Toast.LENGTH_SHORT).show();
                                Tips.MainActivity_success = 1;
                                Tips.MainActivity_fail = 0;
                            }
                        }else {
                            if (retry == 0)
                                if (Tips.MainActivity_fail == 0) {
                                    Toast.makeText(MainActivity.this, "服务器连接失败!正在重试...", Toast.LENGTH_SHORT).show();
                                    Tips.MainActivity_fail = 1;
                                    Tips.MainActivity_success = 0;
                                } else
                                    retry++;
                            connect();
                        }
                    }
                });
            }
        }catch (Exception e){}
    }
}  

这里是判断是否连接的代码:

//判断是否连接
private boolean isConnected(){
    boolean IsCon = false;
    try {
        String mg = BmobIM.getInstance().getCurrentStatus().getMsg();
        if(mg.equals("connected"))
            IsCon = true;
    }catch (Exception e){
        IsCon = false;
    }
    return IsCon;
}  

这里是发送自定义广播的代码,使用EventBus来触发事件:

//发送广播
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(cn.edu.sau.joker.MessageEvent event) {
    Intent intent = new Intent("cn.edu.sau.action.MESSAGE");
    intent.putExtra("msg",event.message);
    sendBroadcast(intent);
}  

下面是退出代码,上面的部分是用户在点击退出的时候会finish掉此Activity,下面时用户点击两次返回键finish当前活动退出:

//销毁活动
@Override
protected void onNewIntent(Intent intent){
    super.onNewIntent(intent);
    if (intent != null) {
        boolean isExit = intent.getBooleanExtra(TAG_EXIT, false);
        if (isExit) {
            this.finish();
        }
    }
}
//连续按两次返回键就退出
@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    if (firstTime + 2000 > System.currentTimeMillis()) {
        super.onBackPressed();
    } else {
        Toast.makeText(this,"再按一次退出程序",Toast.LENGTH_SHORT).show();
        //     Toa("再按一次退出程序");
    }
    firstTime = System.currentTimeMillis();
}  

另外,在使用EventBus时要进行注册和注销:

//注册订阅者
    EventBus.getDefault().register(this);
// 注销订阅者
    EventBus.getDefault().unregister(this);

以上是关于ThinkPHP微的H5聊天室即时通讯系统APP源码分享的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp整合系列之融云即时通讯在线聊天

h5在线1v1客服|web在线客服系统|h5即时聊天

即时通讯聊天源码

H5+MUI+Node.js+Socket.io实现即时聊天以及发送+图片压缩

定制一款即时通讯APP(类似微信)需要多少钱?

H5+MUI+Node.js+Socket.io群组即时聊天+发送图片+图片压缩