編輯:關於Android編程
前一陣時間一直以為環信不能被個人用戶注冊,結果現在想試試結果真的注冊進來了,各種打臉。今天趁著晚上有時間把環信繼承的步驟做一個記錄,方便以後的童鞋們能夠快速的集成。
1.第一步:肯定是創建應用喽
那麼具體步驟為了避免大家看的煩躁,我就不一一截圖了,而是將官網的連接地址給大家po過來
http://docs.easemob.com/im/000quickstart/10register
當然從這個連接中可以清楚的看到
感覺這一巴掌真痛!!!
當然官方的文檔多少有點出入,沒關系,只需要創建好自己的應用就可以了。
第一步so easy
2.第二步:下載sdk
不用多說,照著文檔下載就行。po上網址:
http://www.easemob.com/download/im
解壓後是這樣的。
考慮到開發者需求不一樣,在下載的 SDK 中,提供了兩個不同的 jar 包:
一個是 libs 下帶實時語音功能和實時視頻功能的 jar 包和 so 文件。
如果你不需要實時語音、實時視頻功能,那就直接用 libs.without.audio 文件夾下的 jar 包及 so 文件。
在這裡主要介紹後面四個文件夾內容:
doc 文件夾:SDK 相關API文檔
examples 文件夾:ChatDemoUI3.0(Demo,依賴 EaseUI 庫)、EaseUI
libs 文件夾:包含IM和實時音視頻功能所需要的 jar 和 so 文件
libs.without.audio 文件夾:無實時語音、實時視頻功能的 SDK 包,如果項目中只用到聊天功能,可以把項目裡的 jar 和 so 文件替換成此文件夾裡的 3.第三步:配置工程環境
簡單的說,就是往你的項目中去粘貼東西就行了。
在自行開發的應用中,集成環信聊天需要把 libs 文件夾下的 jar 及 so 文件復制到你的項目的 libs 文件夾相應位置,如果不需要語音和視頻通話功能,導入libs.without.audio 下的文件即可。
如圖:
引入so文件有兩種方法:
方法一:
· 在“src/main”目錄中新建名為“jniLibs”的目錄;
· 將so文件復制、粘貼到“jniLibs”目錄內。
注:如果沒有引用so文件,可能會在程序執行的時候加載類庫失敗,有類似如下的DEBUG提示:
java.lang.UnsatisfiedLinkError: Couldn't load library xxxx from loader dalvik.system.PathClassLoader
方法二:
· 把so文件拷貝到libs文件夾下
· 在build.gradle文件中配置
好啦,這樣就可以輕松的把so文件引入到你的工程中了。
4.第四步,配置代碼環境
在清單文件 AndroidManifest.xml 裡加入以下權限,以及寫上你注冊的 AppKey。
權限配置(實際開發中可能需要更多的權限,可參考 Demo):
android:name="app.MyApp"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
android:name=".ChatActivity"
android:windowSoftInputMode="adjustResize|stateHidden">
關於 EASEMOB_APPKEY 對應的 value 獲取,在創建應用後,申請 AppKey 並進行相關配置。(環信 Demo 中 AppKey 為 easemob-demo#chatdemoui)
接下來是對自己創建的application進行初始化配置:
packageapp;
importandroid.app.ActivityManager;
importandroid.app.Application;
importandroid.content.Context;
importcom.hyphenate.chat.EMClient;
importcom.hyphenate.chat.EMOptions;
importjava.util.Iterator;
importjava.util.List;
/**
*Createdbyguajuon2016/9/12.
*/
publicclassMyAppextendsApplication{
//上下文菜單
privateContextmContext;
//記錄是否已經初始化
privatebooleanisInit=false;
@Override
publicvoidonCreate(){
super.onCreate();
mContext=this;
//初始化環信SDK
initEasemob();
}
/**
*
*/
privatevoidinitEasemob(){
//獲取當前進程id並取得進程名
intpid=android.os.Process.myPid();
StringprocessAppName=getAppName(pid);
/**
*如果app啟用了遠程的service,此application:onCreate會被調用2次
*為了防止環信SDK被初始化2次,加此判斷會保證SDK被初始化1次
*默認的app會在以包名為默認的processname下運行,如果查到的processname不是app的processname就立即返回
*/
if(processAppName==null||!processAppName.equalsIgnoreCase(mContext.getPackageName())){
//則此application的onCreate是被service調用的,直接返回
return;
}
if(isInit){
return;
}
/**
*SDK初始化的一些配置
*關於EMOptions可以參考官方的API文檔
*http://www.easemob.com/apidoc/android/chat3.0/classcom_1_1hyphenate_1_1chat_1_1_e_m_options.html
*/
EMOptionsoptions=newEMOptions();
//設置Appkey,如果配置文件已經配置,這裡可以不用設置
//options.setAppKey("guaju");
//設置自動登錄
options.setAutoLogin(true);
//設置是否需要發送已讀回執
options.setRequireAck(true);
//設置是否需要發送回執,TODO這個暫時有bug,上層收不到發送回執
options.setRequireDeliveryAck(true);
//設置是否需要服務器收到消息確認
options.setRequireServerAck(true);
//收到好友申請是否自動同意,如果是自動同意就不會收到好友請求的回調,因為sdk會自動處理,默認為true
options.setAcceptInvitationAlways(false);
//設置是否自動接收加群邀請,如果設置了當收到群邀請會自動同意加入
options.setAutoAcceptGroupInvitation(false);
//設置(主動或被動)退出群組時,是否刪除群聊聊天記錄
options.setDeleteMessagesAsExitGroup(false);
//設置是否允許聊天室的Owner離開並刪除聊天室的會話
options.allowChatroomOwnerLeave(true);
//設置googleGCM推送id,國內可以不用設置
//options.setGCMNumber(MLConstants.ML_GCM_NUMBER);
//設置集成小米推送的appid和appkey
//options.setMipushConfig(MLConstants.ML_MI_APP_ID,MLConstants.ML_MI_APP_KEY);
//調用初始化方法初始化sdk
EMClient.getInstance().init(mContext,options);
//設置開啟debug模式
EMClient.getInstance().setDebugMode(true);
//設置初始化已經完成
isInit=true;
}
/**
*根據Pid獲取當前進程的名字,一般就是當前app的包名
*
*@parampid進程的id
*@return返回進程的名字
*/
privateStringgetAppName(intpid){
StringprocessName=null;
ActivityManageractivityManager=(ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);
Listlist=activityManager.getRunningAppProcesses();
Iteratori=list.iterator();
while(i.hasNext()){
ActivityManager.RunningAppProcessInfoinfo=(ActivityManager.RunningAppProcessInfo)(i.next());
try{
if(info.pid==pid){
//根據進程的信息獲取當前進程的名字
processName=info.processName;
//返回當前進程名
returnprocessName;
}
}catch(Exceptione){
e.printStackTrace();
}
}
//沒有匹配的項,返回為null
returnnull;
}
}
上一篇文章總結的布局優化的問題,如果對布局優化不是很熟悉的,可以看一下Android Studido下的應用性能優化總結–布局優化 , 這周一直籌劃總結一下內
本文實現一個簡易的人品計算器來實踐在不同Actitity之間數據傳遞intent的數據傳遞從A界面打開B界面 把A界面的數據傳遞給B界面1. intent.setData
最近幫朋友做了一個動畫菜單,感覺有一定的實用價值,就在此給大家分享一下,先看看效果:實現思路:從圖中可以看出,這三個(或更多,需要自己再實現)菜單是圍繞著中心點旋轉的,旋
Intent是Android中用來調用其它組件的類,通過Intent,我們可以非常方便的調用Activity,Broadcast Receiver和Service。Int
activity類 package com.kane.listview;