`
zhonglunshun
  • 浏览: 139100 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

环信demo学习之(一)

 
阅读更多

本次学习思路是跟着环信的sdk 的apk例子,根据用户操作,把功能走一遍,代码的讲解跟随功能一起讲;

所以首先在我们安装好了apk之后,从点击launch图标之后执行的一系列代码开始跟踪,ready?~~ Go!

0,初始化应用application:

看到这里有一个sdk初始化助手类,集成自HXSDKHelper环信sdk助手类,里面定义了很多公共的方法和属性以及软件相关的配置,包括程序初始化,获取上下文,设置用户自定义配置,初始化连接监听,获取群组列表并通知更新,获取好友列表并通知更新以及反初始化方法;

 

hxSDKHelper.onInit(applicationContext);

我们很容易猜到,这时做了软件的初始化,跟踪进去,DemoHXSDKHelper这个类是继承自HXSDKHelper的,而HXSDKHelper是一个抽象类,我们来看看这个抽象类里面做了什么,初始化是这样的:

 

public synchronized boolean onInit(Context context){
        if(sdkInited){
            return true;
        }

        appContext = context;

        // create HX SDK model
        hxModel = createModel();
        
        // create a defalut HX SDK model in case subclass did not provide the model
        if(hxModel == null){
            hxModel = new DefaultHXSDKModel(appContext);
        }
        
        int pid = android.os.Process.myPid();
        String processAppName = getAppName(pid);
        
        Log.d(TAG, "process app name : " + processAppName);
        
        // 如果app启用了远程的service,此application:onCreate会被调用2次
        // 为了防止环信SDK被初始化2次,加此判断会保证SDK被初始化1次
        // 默认的app会在以包名为默认的process name下运行,如果查到的process name不是app的process name就立即返回
        if (processAppName == null || !processAppName.equalsIgnoreCase(hxModel.getAppProcessName())) {
            Log.e(TAG, "enter the service process!");
            
            // 则此application::onCreate 是被service 调用的,直接返回
            return false;
        }

        // 初始化环信SDK,一定要先调用init()
        EMChat.getInstance().init(context);
        
        // 设置sandbox测试环境
        if(hxModel.isSandboxMode()){
            EMChat.getInstance().setEnv(EMEnvMode.EMSandboxMode);
        }
        
        if(hxModel.isDebugMode()){
            // set debug mode in development process
            EMChat.getInstance().setDebugMode(true);    
        }

        Log.d(TAG, "initialize EMChat SDK");
                
        initHXOptions();
        initListener();
        
        syncGroupsListeners = new ArrayList<HXSyncListener>();
        syncContactsListeners = new ArrayList<HXSyncListener>();
        syncBlackListListeners = new ArrayList<HXSyncListener>();
        
        isGroupsSyncedWithServer = hxModel.isGroupsSynced();
        isContactsSyncedWithServer = hxModel.isContactSynced();
        isBlackListSyncedWithServer = hxModel.isBacklistSynced();
        
        sdkInited = true;
        return true;
    }
 

 

第一句是调用子类的createModel方法,我们不知道这个model是干嘛的,点进去,我们发现DemoHXSDKModel extends DefaultHXSDKModel;

DefaultHXSDKModel extends HXSDKModel;

那我们从父类开始看起,

HXSDKModel是一个抽象类,定义一些用户自定义配置相关的方法,但是它没有具体的实现,具体的实现交给了它的子类DefaultHXSDKModel ;包括是否开启消息回执,是否需要好友关系,是否接受邀请,是否振铃等方法;

DemoHXSDKModel 这个类里面是一些操作用户列表的方法,包括保存到数据库和获取;

这样我们就明白了,原来这玩意就是一个操作用户列表和配置文件的一个类;

 

然后就是初始化环信sdk了, EMChat.getInstance().init(context);

1.读取服务器配置和手机运行环境,随后初始化asmack的静态代码(因为有些功能要使用,需要提前加载);

2.读取用户配置信息;

3.添加网络连接监听;

4.初始化消息推送服务;

5.设置初始化完成;

 

到这里,软件的初始化做完了,那么,跳转到第一个页面:开屏页;

 

 

1.进入开屏页:

package com.easemob.chatuidemo.activity;

import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.view.animation.AlphaAnimation;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.easemob.chat.EMChatManager;
import com.easemob.chat.EMGroupManager;
import com.easemob.chatuidemo.DemoHXSDKHelper;
import com.easemob.chatuidemo.R;

/**
 * 开屏页
 *
 */
public class SplashActivity extends BaseActivity {
	private RelativeLayout rootLayout;
	private TextView versionText;
	
	private static final int sleepTime = 2000;

	@Override
	protected void onCreate(Bundle arg0) {
		setContentView(R.layout.activity_splash);
		super.onCreate(arg0);

		rootLayout = (RelativeLayout) findViewById(R.id.splash_root);
		versionText = (TextView) findViewById(R.id.tv_version);

		versionText.setText(getVersion());
		AlphaAnimation animation = new AlphaAnimation(0.3f, 1.0f);
		animation.setDuration(1500);
		rootLayout.startAnimation(animation);
	}

	@Override
	protected void onStart() {
		super.onStart();

		new Thread(new Runnable() {
			public void run() {
				if (DemoHXSDKHelper.getInstance().isLogined()) {
					// ** 免登陆情况 加载所有本地群和会话
					//不是必须的,不加sdk也会自动异步去加载(不会重复加载);
					//加上的话保证进了主页面会话和群组都已经load完毕
					long start = System.currentTimeMillis();
					EMGroupManager.getInstance().loadAllGroups();
					EMChatManager.getInstance().loadAllConversations();
					long costTime = System.currentTimeMillis() - start;
					//等待sleeptime时长
					if (sleepTime - costTime > 0) {
						try {
							Thread.sleep(sleepTime - costTime);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
					//进入主页面
					startActivity(new Intent(SplashActivity.this, MainActivity.class));
					finish();
				}else {
					try {
						Thread.sleep(sleepTime);
					} catch (InterruptedException e) {
					}
					startActivity(new Intent(SplashActivity.this, LoginActivity.class));
					finish();
				}
			}
		}).start();

	}
	
	/**
	 * 获取当前应用程序的版本号
	 */
	private String getVersion() {
		String st = getResources().getString(R.string.Version_number_is_wrong);
		PackageManager pm = getPackageManager();
		try {
			PackageInfo packinfo = pm.getPackageInfo(getPackageName(), 0);
			String version = packinfo.versionName;
			return version;
		} catch (NameNotFoundException e) {
			e.printStackTrace();
			return st;
		}
	}
}

 核心代码就是上面这个啦,首先判断是否已经登录了,原理就是判断当前获取到的用户和最后登录的用户是不是同一个,是的话返回true;如果是的话加载群组和会话信息(因为这两个时间比较长而且必须等到这两个东西加载完成才能进去系统,所以放在开屏页很合适);

 

因为是第一次登录,当然是转到登录页面啦;下一节开始讲用户登录;

分享到:
评论

相关推荐

    java环信demo非mava工程

    Java环信Demo非Maven工程是一个专为Java开发者设计的示例项目,它不依赖于Maven构建系统,而是采用其他方式来管理依赖。环信(Easemob)是一家提供即时通讯服务的云平台,它为企业和开发者提供了构建聊天功能的API和...

    vue集成环信demo(包括视频通话)

    Vue集成环信(Easemob)Demo是一个用于...以上就是关于“vue集成环信demo(包括视频通话)”的相关知识点,通过这个Demo,你可以学习到如何在Vue.js项目中实现即时通讯和视频通话功能,为你的应用增添更多交互可能性。

    appcan 环信聊天demo

    总结,"appcan 环信聊天demo"是一个用于演示如何在AppCan平台上集成环信即时通讯功能的示例项目。通过这个Demo,开发者可以学习到如何在HTML5应用中实现聊天功能,包括用户认证、会话创建、消息发送与接收、地理位置...

    环信集成完整版Demo

    通过环信集成Demo,开发者可以快速理解和学习如何将环信的各项功能融入到自己的应用中,从而打造一个高效、稳定的即时通讯系统。这个Demo涵盖了环信服务的主要应用场景,对于开发者来说是一份宝贵的参考资料。

    简单环信Demo

    在这个“简单环信Demo”项目中,我们将深入探讨如何利用环信提供的技术实现一个基础的聊天应用。 首先,我们需要在环信官方网站注册开发者账号并创建自己的应用。在创建应用后,我们会得到一个AppKey,这是连接环信...

    环信IM工程demo

    通过这个Demo,开发者可以直观地了解并学习如何在自己的应用中实现类似的功能,以便于在实际项目中使用环信IM进行聊天、群组沟通等任务。 环信IM(Easemob)是一款强大的云通讯服务,提供了丰富的API和SDK,支持...

    自写环信demo

    "自写环信demo"是基于环信平台创建的一个示例项目,用于展示如何在应用程序中集成环信的服务。这个压缩包可能包含了必要的代码文件和配置文件,帮助开发者理解并学习环信的使用。 首先,我们来看"注意事项.txt",这...

    环信demo

    通过深入学习和实践"环信demo"中的内容,开发者可以快速掌握环信即时通讯平台的使用,进而开发出满足业务需求的通信应用。同时,这也为开发者提供了进一步探索即时通讯技术的起点,例如性能优化、用户体验提升等方面...

    iOS 环信单聊很好的demo

    2. 消息气泡:环信Demo中的消息气泡设计,区分了发送者和接收者的消息,同时支持不同类型的消息展示,如富文本、表情等。 六、其他功能扩展 1. 消息撤回:允许用户撤回已发送的消息,这需要调用环信SDK的撤回接口,...

    环信demo即时通信

    在"环信demo即时通信"中,我们可以看到几个关键组成部分: 1. **doc**:这个文件夹可能包含环信的API文档、开发指南和使用手册。这些文档是开发者理解和使用环信SDK的重要资源,包括了详细的功能介绍、接口调用方法...

    android:环信demo(已屏幕适配)

    综上所述,这个“android:环信demo(已屏幕适配)”项目是一个全面展示如何在Android应用中集成和优化环信聊天功能的例子,对于学习和参考具有很高的价值。开发者可以通过研究这个Demo,了解如何在实际项目中实现即时...

    服务端环信demo,自行整理出来的,更换key id 就可以用

    综上所述,这个"服务端环信demo"为开发者提供了一个简洁易用的环信集成方案,简化了官方示例中的复杂步骤,使开发者能更快速地在自己的项目中实现即时通讯功能。通过深入理解环信的API和SDK,结合作者的封装代码,...

    iOS 环信demo

    **iOS 环信Demo详解** 环信(Easemob)是一款专为开发者设计的即时通讯云服务,它提供了一整套API和SDK,帮助开发者快速在iOS应用中集成聊天功能,包括单聊、群聊、文件传输等。本Demo是环信针对iOS平台提供的一个...

    环信demodemo

    "环信demodemo"很可能是环信提供的一个示例项目或者演示应用,用于展示其功能和集成方式,帮助开发者更好地理解和使用环信服务。 在这个名为"kefu-android-demo-master"的压缩包中,我们可以推测它包含了一个...

    Android环信即时通讯简单DEMO

    通过分析这个DEMO,我们可以学习到如何在Android应用中实现一个基本的即时通讯功能,包括用户管理、消息收发、聊天界面展示等。同时,环信的开源特性使得开发者可以根据自己的需求对SDK进行定制,增强应用的功能性和...

    环信即时通讯服务端DEMO

    3. **请求与响应处理**:开发者可以通过DEMO学习如何构造HTTP请求,调用环信的RESTful API,以及解析返回的JSON数据。理解请求参数和响应结构对于正确使用环信服务至关重要。 4. **安全性与授权**:环信的通信服务...

    环信客服集成的demo

    下面我们将深入探讨环信客服集成的关键知识点,以及如何通过Demo来理解和学习这一过程。 1. **环信客服系统概述**:环信客服系统主要提供实时聊天、语音通话、视频咨询、工单处理等多种客户服务渠道,支持多终端接...

    环信即时聊天与java后台接口对接demo

    然后可以查看源代码,学习如何调用环信的API,理解每个接口的实现逻辑。此外,需要注意的是,为了安全性,实际部署时应当替换掉配置文件中的示例AppKey和AppSecret,使用自己的环信应用信息。 总之,这个“环信即时...

    两个环信聊天demo.7z

    总之,“两个环信聊天demo.7z”压缩包为开发者提供了一个很好的起点,通过学习和实践这两个示例,开发者不仅可以掌握环信的基本用法,还能了解到即时通讯功能如何融入到不同类型的项目中,提升应用的交互性和用户...

    环信UIDemoV2.1.8

    "环信UIDemoV2.1.8"是环信推出的一个用户界面演示应用程序的特定版本,旨在帮助开发者更好地理解和集成环信的SDK到他们的应用中。这个版本可能是针对即时通讯功能的优化或者新增了一些特性,因此用户希望保存此版本...

Global site tag (gtag.js) - Google Analytics