依賴配置
在Project的build.gradle中添加如下內容:
buildscript {
....
allprojects {
repositories {
jcenter()
//Bmob的maven倉庫地址斯辰,必須填寫
maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }
}
....
}
在app的build.gradle文件中添加compile依賴文件
dependencies {
....
//bmob-im:自2.0.5開始提供aar格式:包含BmobNewIM_xxxx.jar辜限、androidasync_2.1.6.jar佳晶、 bmob_im_notification_strings.xml
compile 'cn.bmob.android:bmob-im:2.0.5@aar'
//bmob-sdk:3.4.7 IM服務使用BmobSDK的 BmobFile 用于圖片、語音等文件消息的發(fā)送,因此必須導入特定版本的BmobSDK。
compile 'cn.bmob.android:bmob-sdk:3.4.7-aar'
}
配置AndroidManifest.xml
1、 添加Bmob_APP_KEY:
<meta-data
android:name="Bmob_APP_KEY"
android:value="Bmob平臺的Application ID" />
注:Bmob_APP_KEY 必須填寫,否則無法正常使用IM服務肠阱。
2、 添加權限
<!--網絡權限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 監(jiān)聽網絡的變化 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<!-- 設備休眠 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- sd卡存儲-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--攝像頭-->
<uses-permission android:name="android.permission.CAMERA" />
<!--錄音-->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!--通知震動-->
<uses-permission android:name="android.permission.VIBRATE" />
3朴读、 添加Service屹徘、receiver標簽:
<receiver android:name="cn.bmob.newim.core.ConnectChangeReceiver" >
<intent-filter>
<action android:name="cn.bmob.action.RECONNECT" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
<service
android:name="cn.bmob.newim.core.service.BmobIMService"
android:process=":bmobcore" />
<service
android:name="cn.bmob.newim.core.service.NotifyService"
android:process=":bmobcore" />
<service android:name="cn.bmob.newim.core.service.ReConnectService" />
<service android:name="cn.bmob.newim.core.service.HeartBeatService" />
注:自v2.0.5版本開始,將原來的BmobImService名稱更換為'BmobIMService'衅金,請務必修改噪伊,否則將無法正常使用IM服務。
注冊消息接收器
如果你使用的是NewIM_V2.0.2以后(包含v2.0.2)的SDK版本,那么你需要自定義消息接收器繼承自BmobIMMessageHandler來處理服務器發(fā)來的消息和離線消息氮唯。
public class DemoMessageHandler extends BmobIMMessageHandler{
@Override
public void onMessageReceive(final MessageEvent event) {
//當接收到服務器發(fā)來的消息時鉴吹,此方法被調用
}
@Override
public void onOfflineReceive(final OfflineMessageEvent event) {
//每次調用connect方法時會查詢一次離線消息,如果有惩琉,此方法會被調用
}
}
別忘記在Application的onCreate方法中注冊這個DemoMessageHandler:
public class BmobIMApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
//NewIM初始化
BmobIM.init(this);
//注冊消息接收器
BmobIM.registerDefaultMessageHandler(new DemoMessageHandler(this));
}
}
初始化
在Application的onCreate方法中調用BmobIM.init(context)
public class BmobIMApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
//只有主進程運行的時候才需要初始化
if (getApplicationInfo().packageName.equals(getMyProcessName())){
//im初始化
BmobIM.init(this);
//注冊消息接收器
BmobIM.registerDefaultMessageHandler(new DemoMessageHandler(this));
}
}
/**
* 獲取當前運行的進程名
* @return
*/
public static String getMyProcessName() {
try {
File file = new File("/proc/" + android.os.Process.myPid() + "/" + "cmdline");
BufferedReader mBufferedReader = new BufferedReader(new FileReader(file));
String processName = mBufferedReader.readLine().trim();
mBufferedReader.close();
return processName;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
注:
初始化方法包含了BmobSDK的初始化步驟豆励,故無需再初始化BmobSDK
在初始化的時候,最好做下判斷:只有主進程運行的時候才開始初始化,避免資源浪費良蒸。
服務器連接
連接服務器:
User user = BmobUser.getCurrentUser(context,User.class);
BmobIM.connect(user.getObjectId(), new ConnectListener() {
@Override
public void done(String uid, BmobException e) {
if (e == null) {
Logger.i("connect success");
} else {
Logger.e(e.getErrorCode() + "/" + e.getMessage());
}
}
});
注:
調用connect方法技扼,需要傳入一個唯一的用戶標示clientId,Demo使用的是Bmob的用戶登錄系統(tǒng)嫩痰。
斷開連接:
BmobIM.getInstance().disConnect();