即时通讯项目基于环信的SDK,新建项目,导入环信的JAR包,配置清单文件下的元数据。(给出代码形式呈现)
先是SplashActivity界面,他的布局如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/splash_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg"
android:gravity="center"
android:orientation="vertical"
>
<ImageView
android:id="@+id/logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
android:paddingLeft="20dip"
android:paddingRight="20dip"
android:scaleType="centerInside"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dip"
android:text="超信"
android:shadowColor="@android:color/darker_gray"
android:shadowDx="0"
android:shadowDy="2"
android:shadowRadius="1"
android:textColor="@android:color/background_dark"
android:textSize="22dip"
android:typeface="serif"
/>
<TextView
android:id="@+id/tv_version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dip"
android:gravity="bottom"
android:shadowColor="@android:color/darker_gray"
android:shadowDx="0"
android:shadowDy="2"
android:shadowRadius="1"
android:text="版本号"
android:textColor="@android:color/background_dark"
android:textSize="15dip"
android:typeface="serif" >
</TextView>
</LinearLayout>
再创建一个全局的Application类,本节在里面添加获取用户名和密码的方法。
如下:
package com.dy.ustc.im.application;
import com.easemob.chat.EMChat;
import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
public class IMApplication extends Application {
public static Context applicationContext;
private static IMApplication instance;
//登录的用户名
public final String PREF_USERNAME = "username";
private String userName = null;
//登录的密码
private static final String PREF_PWD = "pwd";
private String password = null;
@Override
public void onCreate() {
super.onCreate();
//开始忘记初始化,直接导致SplashActivity的线程空指针挂掉退出
applicationContext = this;
instance = this;
// 初始化环信SDK,一定要先调用init()
EMChat.getInstance().init(applicationContext);
EMChat.getInstance().setDebugMode(true);
}
public static IMApplication getInstance(){
return instance;
}
/**
* 获取当前的登录的用户名
*
* @return
*/
public String getUserName(){
if (userName == null) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(applicationContext);
userName = preferences.getString(PREF_USERNAME, null);
}
return userName;
}
/**
* 获取密码
* @return
*/
public String getPassword(){
if (password == null) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(applicationContext);
password = preferences.getString(PREF_PWD, null);
}
return password;
}
}
创建BaseActivity,实现他的onResume方法,具体作用后面再说。代码如下:
package com.dy.ustc.im.ui;
import com.easemob.chat.EMChatManager;
import android.support.v4.app.FragmentActivity;
public class BaseActivity extends FragmentActivity {
@Override
protected void onResume() {
super.onResume();
//onresume时,取消notification显示
//官方的关于activityResumed的说明:
//应用从后台回到前台,需要用activityResumed 通知sdk sdk 会reset 系统的消息通知 (notification area)
EMChatManager.getInstance().activityResumed();
}
}
最后是本节的SplashActivity,他完成获取应用程序的版本号还有跳转到主界面或者登陆界面的功能。
代码如下:
package com.dy.ustc.im.ui;
import com.dy.ustc.im.R;
import com.dy.ustc.im.R.id;
import com.dy.ustc.im.R.layout;
import com.dy.ustc.im.application.IMApplication;
import com.easemob.chat.EMChatManager;
import com.easemob.chat.EMGroupManager;
import android.app.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.Window;
import android.view.animation.AlphaAnimation;
import android.widget.LinearLayout;
import android.widget.TextView;
/**
*
* 欢迎的SplashActivity界面
*
*
*
* @author
*
*/
public class SplashActivity extends Activity {
private LinearLayout rootLayout;
private TextView versionText;
private static final int sleepTime = 2500;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_splash);
rootLayout = (LinearLayout) findViewById(R.id.splash_root);
versionText = (TextView) findViewById(R.id.tv_version);
versionText.setText(getVersion());
AlphaAnimation alphaAnimation = new AlphaAnimation(0.0f, 1.0f);
alphaAnimation.setDuration(2000);
rootLayout.startAnimation(alphaAnimation);
}
@Override
protected void onStart(){
super.onStart();
new Thread(new Runnable() {
@Override
public void run() {
if (IMApplication.getInstance().getUserName() != null && IMApplication.getInstance().getPassword()!= null) {
//免登录情况,加载所有的本地群和所有的会话
long start = System.currentTimeMillis();
EMGroupManager.getInstance().loadAllGroups();
EMChatManager.getInstance().loadAllConversations();
long costTime = System.currentTimeMillis() - start;
if (sleepTime - costTime > 0) {
try {
Thread.sleep(sleepTime-costTime);
} catch (Exception e) {
e.printStackTrace();
}
}
startActivity(new Intent(SplashActivity.this, MainActivity.class));
finish();
}else {
try {
Thread.sleep(sleepTime);
} catch (Exception e) {
e.printStackTrace();
}
startActivity(new Intent(SplashActivity.this, LoginActivity.class));
finish();
}
}
}).start();
}
/**
* 获取当前应用程序的版本号
*
* @return
*/
private String getVersion(){
PackageManager pm = getPackageManager();
try {
PackageInfo info = pm.getPackageInfo(getPackageName(), 0);
String version = info.versionName;
return version;
} catch (NameNotFoundException e) {
e.printStackTrace();
return "版本号错误";
}
}
}
最后使我们配置的清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.dy.ustc.im"
android:versionCode="2"
android:versionName="2.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<application
android:name="com.dy.ustc.im.application.IMApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.dy.ustc.im.ui.SplashActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.dy.ustc.im.ui.BaseActivity"></activity>
<activity android:name="com.dy.ustc.im.ui.MainActivity"></activity>
<activity android:name="com.dy.ustc.im.ui.LoginActivity"></activity>
<!-- 设置环信应用的appkey -->
<meta-data
android:name="EASEMOB_APPKEY"
android:value="eoeduo#test" />
</application>
</manifest>
本节完。