編輯:關於Android編程
開始集成,盡量以module的形式編寫,提供一個開放類
1.添加依賴
新建項目sdk包libs中的jar拖到libs,其余全部放入src/jniLibs(沒有jniLibs目錄則新建)
小知識1:
compile fileTree(include: [‘*.jar’], dir: ‘libs’,exclude: ‘libammsdk.jar’)
//上邊這個exclude可以指定忽略引用libs中的牧歌jar因為我們項目中主模塊已經使用了這個jar所以這塊忽略,在下邊添加
provided files(‘libs/libammsdk.jar’)小知識2:
compileSdkVersion版本用23
targetSdkVersion不要用23,因為23就要處理很多權限問題,成熟了再用
SDK混淆
-keep class com.tencent.*{;}
-dontwarn com.tencent.**
-keep class tencent.*{;}
-dontwarn tencent.**
-keep class qalsdk.*{;}
-dontwarn qalsdk.**
記得要把在xml中使用過的自定義View忽略混淆
-dontwarn com.prj.me.views.customview.**
-keep class com.prj.me.views.customview {*;}
2.初始化,將這段代碼封裝到初始化方法中在需要初始化的時候調用
//初始化imsdk,context必須是ApplicationContext,隨便你什麼時候初始化
TIMManager.getInstance().init(context);
//禁止服務器自動代替上報已讀
TIMManager.getInstance().disableAutoReport();
//用戶狀態監聽
TIMManager.getInstance().setUserStatusListener(new TIMUserStatusListener() {
@Override
public void onForceOffline() {
Toast.makeText(mContext, "被T下線", Toast.LENGTH_SHORT).show();
//被T下線的廣播
mContext.sendBroadcast(new Intent(BD_EXIT_APP));
}
@Override
public void onUserSigExpired() {
//登錄憑證過期,後邊登錄會說到sign
//Klog:https://github.com/ZhaoKaiQiang/KLog只是一個日志輸出工具包,挺好用的
KLog.w("sign過期");
}
});
//設置IM刷新監聽
TIMManager.getInstance().setRefreshListener(new TIMRefreshListener() {
@Override
public void onRefresh() {
KLog.i("刷新成功...........");
}
@Override
public void onRefreshConversation(List list) {
KLog.i("刷新會話列表...........");
}
});
// 設置離線推送監聽器,接受離線推送消息的,這個是發送離線消息才會調用 一般發送的都是在線消息
TIMManager.getInstance().setOfflinePushListener(new TIMOfflinePushListener() {
@Override
public void handleNotification(TIMOfflinePushNotification notification) {
Log.d("MyApplication", "收到離線消息");
// 這裡的doNotify是ImSDK內置的通知欄提醒,
notification.doNotify(mContext, R.mipmap.ic_launcher);
//應用也可以選擇自己利用回調參數notification來構造自己的通知欄提醒
//PushUtil.getInstance(MyApp_.getInstance());
//notification.getTitle(); //標題
//notification.getContent(); //內容
//notification.getConversationId(); //獲取會話id
//notification.getSenderIdentifier(); //獲取發送者id
}
});
//1.單例類MessageEvent
//MessageEvent是自己寫的類實現了TIMMessageListener(消息監聽)
//TIMManager.getInstance().addMessageListener(this); //注冊了消息監聽
//ImSdk收到消息回調onNewMessages(List list)方法,參數為消息集合
//2.同時MessageEvent也是一個被觀察者,繼承自Observable,
//通過調用notifyObservers(TIMMessage message),通知所有觀察者
MessageEvent.getInstance();
//一個添加狀態欄通知的類,注冊為MessageEvent的觀察者,
//收到更新時判斷應用程序當前狀態決定是否根據消息信息添加狀態欄通知
PushUtil.getInstance();
3.登錄Im
//自己封裝的登錄所需要的實體類
//騰訊IM登錄分為獨立模式和托管模式
//獨立模式:有自己的帳號體系
//托管模式:由騰訊管理帳號,通過tls_sdk管理帳號,一般這個sdk默認已經在ImSDK中了
public class CurImInfo {
public String sign; //憑證,獨立模式和托管模式主要在於獲取憑證的方式不同
public String userid; //登錄到Im系統中的用戶Id
//https://console.qcloud.com/avc 在管理頁面點擊你的應用的應用配置查看SDKAPPID,accountType
public int sdkappid;
public int accountType;
//密碼只在托管模式需要
public String pwd;
}
//主要是獲取sign的方式不同,在應用配置頁下載公鑰
//騰訊Im通過私鑰加密生成sign,我們用公鑰解密獲取sign
//可以自己生成公私鑰,把私鑰上傳給騰訊IM(一般使用騰訊生成的就行)
//托管模式不需要管公私鑰,是由tls帳號管理系統使用的
//獨立模式,自己搭建通過私鑰加密獲取sign的服務器程序,
//這兒有個php獲取sign的服務器程序,index.php中有注釋
//index.php裡邊填的那個應該是私鑰,備注應該有錯誤……
//也可以是其他語言的看這個頁面
userId(要登錄到Im平台的唯一Id)
sdkAppid應用配置頁面查看
accountype應用配置頁面查看
將上邊的信息封裝成一個CurImInfo開始登錄...............
獨立模式登錄
sign通過請求上邊那個php服務器獲取
//托管模式
//用戶名和密碼是通過Tls注冊接口注冊到Tls的具體查看api
//TlsSdk初始化
TLSLoginHelper.getInstance().init(context,imInfo.sdkappid,imInfo.accountType,"1.0");
//注冊
IMSDKInithelp.getmAccountHelper().TLSStrAccReg(id, psw, new TLSStrAccRegListener() {
//只需要用戶名和密碼,登錄成功後就可獲取sign,看下邊這個方法
TLSLoginHelper.getInstance().TLSPwdLogin(
imInfo.userid,
imInfo.pwd.getBytes(),
new TLSPwdLoginListener() {
@Override
public void OnPwdLoginSuccess(TLSUserInfo tlsUserInfo) {//獲取用戶信息
KLog.i(TAG, "TLS 登錄成功" + tlsUserInfo.identifier);
//tls登錄成功以後就可以獲取sign,繼續
String userSig = TLSLoginHelper.getInstance().getUserSig(tlsUserInfo.identifier);
imInfo.sig=userSig;
imLogin(imInfo);
}
//不管怎麼獲取到sign 將相關信息封裝成CurIminfo對象,按照下邊方式登錄
public void imLogin(CurImInfo imInfo) {
TIMUser user = new TIMUser();
user.setAccountType(String.valueOf(imInfo.accountType));
user.setAppIdAt3rd(String.valueOf(imInfo.sdkappid));
user.setIdentifier(imInfo.userid);
//發起登錄請求
TIMManager.getInstance().login(imInfo.sdkappid, user,imInfo.sig,mTimCallBack);
}
/**
* 登錄Im回調
*/
public TIMCallBack mTimCallBack=new TIMCallBack() {
@Override
public void onError(int i, String s) {
Toast.makeText(mContext,"IM登錄失敗",Toast.LENGTH_SHORT).show();
if (mLoginView != null) mLoginView.loginFail();
}
@Override
public void onSuccess() {
Toast.makeText(mContext,"IM登錄成功",Toast.LENGTH_SHORT).show();
if (mLoginView != null) mLoginView.loginSucc();
}
};
登錄成功以後就可以調用相關發送消息……所有功能api
聊天界面的話我是從demo中扣出來自己改的,需要時間閱讀
采用的是mvp模式,給我提取寫出的demo應該能提高閱讀效率
隨時私密
將demo中的初始化到登錄走一邊
再看chatActivity聊天界面
demo下載
android的ListView點擊item使item展開的做法
直接上代碼把,主要是重新給item measure高度,直接上代碼把 import java.util.ArrayList; import android.app.A
Android ListFragment實例Demo
該篇文章是一個ListFragment的一個實例,通過了解該實例,更能了解比較常用的ListFragment的用法,以及各Fragment之間的數據傳遞。 實現效果圖:
Android Studio中配置及使用OpenCV示例
Android Studio配置及使用OpenCV 前言:最近在做項目移植,項目較大,在Eclipse中配置的Jni及OpenCV環境沒任何問題,但是遷移到St
Android_自定義雙向SeekBar
目標:雙向拖動的自定義View國際慣例先預覽後實現實現步驟自定義屬性的抽取 view尺寸的計算 相關內容的繪制(文字,原點,背景進度條,當前進度條等等) 處理滑動事件大體