This commit is contained in:
2025-11-18 15:12:24 +08:00
parent c173c425ce
commit a7d2035e70
1361 changed files with 367452 additions and 0 deletions
@@ -0,0 +1,748 @@
package cn.shangyu.gdxzExpert.application;
import static cn.shangyu.gdxzExpert.ecdemo.common.utils.FileAccessor.IMESSAGE_IMAGE;
import static cn.shangyu.gdxzExpert.utils.Constant.uniapp_mp_appid;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Handler;
import android.os.Process;
import android.os.StrictMode;
import android.text.TextUtils;
import android.webkit.WebView;
import androidx.multidex.MultiDex;
import com.apowersoft.dlnasender.api.listener.WxDlnaSenderInitCallback;
import com.easefun.polyvsdk.PolyvDevMountInfo;
import com.easefun.polyvsdk.PolyvDownloaderManager;
import com.easefun.polyvsdk.PolyvSDKClient;
import com.heytap.msp.push.HeytapPushManager;
import com.huawei.hms.support.common.ActivityMgr;
import com.netease.nim.uikit.api.NimUIKit;
import com.netease.nim.uikit.api.UIKitOptions;
import com.netease.nim.uikit.business.contact.core.query.PinYin;
import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.Observer;
import com.netease.nimlib.sdk.SDKOptions;
import com.netease.nimlib.sdk.StatusCode;
import com.netease.nimlib.sdk.auth.AuthService;
import com.netease.nimlib.sdk.auth.AuthServiceObserver;
import com.netease.nimlib.sdk.auth.LoginInfo;
import com.netease.nimlib.sdk.mixpush.NIMPushClient;
import com.netease.nimlib.sdk.util.NIMUtil;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.memory.impl.WeakMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.utils.StorageUtils;
import com.umeng.analytics.MobclickAgent;
import com.umeng.commonsdk.UMConfigure;
import com.umeng.socialize.PlatformConfig;
import com.zhy.http.okhttp.OkHttpUtils;
import java.io.File;
import java.io.InvalidClassException;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import io.dcloud.feature.sdk.Interface.IUniMP;
import cn.shangyu.gdxzExpert.activity.LoginNewActivity;
import cn.shangyu.gdxzExpert.cast.PolyvScreencastManager;
import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager;
import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferenceSettings;
import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferences;
import cn.shangyu.gdxzExpert.ecdemo.common.utils.FileAccessor;
import cn.shangyu.gdxzExpert.netease.DemoCache;
import cn.shangyu.gdxzExpert.netease.NIMInitManager;
import cn.shangyu.gdxzExpert.netease.NimSDKOptionConfig;
import cn.shangyu.gdxzExpert.netease.chatroom.ChatRoomSessionHelper;
import cn.shangyu.gdxzExpert.netease.config.DefaultContactProvider;
import cn.shangyu.gdxzExpert.netease.config.LogoutHelper;
import cn.shangyu.gdxzExpert.netease.config.preference.Preferences;
import cn.shangyu.gdxzExpert.netease.config.preference.UserPreferences;
import cn.shangyu.gdxzExpert.netease.contact.ContactHelper;
import cn.shangyu.gdxzExpert.netease.event.DemoOnlineStateContentProvider;
import cn.shangyu.gdxzExpert.netease.mixpush.DemoMixPushMessageHandler;
import cn.shangyu.gdxzExpert.netease.mixpush.DemoPushContentProvider;
import cn.shangyu.gdxzExpert.netease.session.SessionHelper;
import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvStorageUtils;
import cn.shangyu.gdxzExpert.umeng.PushHelper;
import cn.shangyu.gdxzExpert.utils.Constant;
import cn.shangyu.gdxzExpert.utils.LogUtil;
import cn.shangyu.gdxzExpert.utils.StringUtil;
import me.jessyan.autosize.AutoSize;
import me.jessyan.autosize.AutoSizeConfig;
import me.jessyan.autosize.onAdaptListener;
import okhttp3.OkHttpClient;
//import com.huawei.android.hms.agent.HMSAgent;
/**
*
* BaseApplication.java
*
* @author gaofei
* @date 2015-8-31 上午9:54:20 Copyright (C) 2015 河南商宇科技有限公司
*
* 功能说明:application
*/
public class BaseApplication extends Application {
private static Context context;// 上下文
private static int mainThreadId;
private static Thread mainThread;
private static Handler handler;
private static SharedPreferences preferences;// sp
public Object cache;// 全局临时对象存储
private static BaseApplication instance;
public static Map<String, Long> timemap;
public static Map<String, Integer> lookNum;
public static boolean refreshExpertDetial = false;// 刷新专家详情的鲜花数量
public static final String APP_ID = "2882303761517470793";
public static final String APP_KEY = "5431747048793";
// 全局 UniMP 缓存,全页面共享
private static HashMap<String, IUniMP> mUniMPCaches = new HashMap<>();
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
/**
* 单例,返回一个实例
*
* @return
*/
public static BaseApplication getInstance() {
if (instance == null) {
LogUtil.w("[ECApplication] instance is null.");
}
return instance;
}
public static void addNum(String uuid, int i) {
int newnum = i;
if (lookNum == null) {
lookNum = new HashMap<String, Integer>();
}
for (Map.Entry<String, Integer> entry : lookNum.entrySet()) {
if (entry.getKey().equals(uuid)) {
newnum = entry.getValue() + i;
}
}
lookNum.put(uuid, newnum);
}
public static Map<String, Integer> getNumMap() {
return lookNum;
}
public static void clearMap() {
lookNum.clear();
}
/**
* 获取全局 UniMP 缓存
* @return UniMP 缓存 HashMap
*/
public static HashMap<String, IUniMP> getUniMPCaches() {
return mUniMPCaches;
}
private static List<String> tagList = new ArrayList<>();
public static List<String> getTagList() {
return tagList;
}
public static void setTagList(List<String> tagList) {
BaseApplication.tagList = tagList;
}
private static Boolean notify = false;
public static Boolean getNotify() {
return notify;
}
public static void setNotify(Boolean notify) {
BaseApplication.notify = notify;
}
private static Boolean notifyexit = false;
public static Boolean getNotifyexit() {
return notifyexit;
}
public static void setNotifyexit(Boolean notifyexit) {
BaseApplication.notifyexit = notifyexit;
}
private static Boolean iscollent = false;
public static Boolean getIscollent() {
return iscollent;
}
public static void setIscollent(Boolean iscollent) {
BaseApplication.iscollent = iscollent;
}
// UIKit初始化标志,防止重复初始化
private static boolean isUIKitInitialized = false;
{
PlatformConfig.setWeixin("wxbf3658f5e674667c",
"c4505a04a9910c65efea8e11ffc93f92");
PlatformConfig
.setSinaWeibo("2071931330", "a7f66853db58d51374571691e5cf36a9",
"http://sns.whalecloud.com");
}
@Override
public void onCreate() {
super.onCreate();
AutoSize.initCompatMultiProcess(this);
//如果在某些特殊情况下出现 InitProvider 未能正常实例化, 导致 AndroidAutoSize 未能完成初始化
//可以主动调用 AutoSize.checkAndInit(this) 方法, 完成 AndroidAutoSize 的初始化后即可正常使用
// AutoSize.checkAndInit(this);
// 如何控制 AndroidAutoSize 的初始化,让 AndroidAutoSize 在某些设备上不自动启动?https://github.com/JessYanCoding/AndroidAutoSize/issues/249
AutoSizeConfig.getInstance()
.setCustomFragment(true)
.setExcludeFontScale(true)
//区别于系统字体大小的放大比例, AndroidAutoSize 允许 APP 内部可以独立于系统字体大小之外,独自拥有全局调节 APP 字体大小的能力
//当然, 在 APP 内您必须使用 sp 来作为字体的单位, 否则此功能无效, 不设置或将此值设为 0 则取消此功能
// .setPrivateFontScale(0.8f)
//屏幕适配监听器
.setOnAdaptListener(new onAdaptListener() {
@Override
public void onAdaptBefore(Object target, Activity activity) {
//使用以下代码, 可以解决横竖屏切换时的屏幕适配问题
//使用以下代码, 可支持 Android 的分屏或缩放模式, 但前提是在分屏或缩放模式下当用户改变您 App 的窗口大小时
//系统会重绘当前的页面, 经测试在某些机型, 某些情况下系统不会重绘当前页面, ScreenUtils.getScreenSize(activity) 的参数一定要不要传 Application!!!
// AutoSizeConfig.getInstance().setScreenWidth(ScreenUtils.getScreenSize(activity)[0]);
// AutoSizeConfig.getInstance().setScreenHeight(ScreenUtils.getScreenSize(activity)[1]);
// AutoSizeLog.d(String.format(Locale.ENGLISH, "%s onAdaptBefore!", target.getClass().getName()));
}
@Override
public void onAdaptAfter(Object target, Activity activity) {
// AutoSizeLog.d(String.format(Locale.ENGLISH, "%s onAdaptAfter!", target.getClass().getName()));
}
});
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
WebView.setDataDirectorySuffix(Process.myPid() + "");
}
context = getApplicationContext();
// mainThreadId
mainThreadId = android.os.Process.myTid();
// Thread-->object
mainThread = Thread.currentThread();
// Handler
handler = new Handler();//wcx以前
// SharedPreferences
preferences = getSharedPreferences(Constant.SP_NAME, 0);
// 容联
instance = this;
//
// 崩溃处理测试环境打卡
// if (CrashHandler.getInstance() != null) {
// CrashHandler.getInstance().init(getApplicationContext());
// }
boolean isFirstRun=this.getSharedPreferences("share",MODE_PRIVATE).getBoolean("isFirstRun", true);
if(!isFirstRun)//隐私权限
{
initYinsi();
}
}
public void initYinsi()
{
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(10000L, TimeUnit.MILLISECONDS)
.readTimeout(10000L, TimeUnit.MILLISECONDS)
//其他配置
.build();
OkHttpUtils.initClient(okHttpClient);
CCPAppManager.setContext(instance);
FileAccessor.initFileAccess();
setChattingContactId();
hookWebView();
YunXininit();
//日志开关
UMConfigure.setLogEnabled(false);
//预初始化
PushHelper.preInit(this);
initImageLoader();
// 创建默认的ImageLoader配置参数
// ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);
// ImageLoader.getInstance().init(configuration);
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();
//初始化组件化基础库, 统计SDK/推送SDK/分享SDK都必须调用此初始化接口
UMConfigure.init(context, "56caa908e0f55aeff4001cd0", "Umeng", UMConfigure.DEVICE_TYPE_PHONE,
"38088a7ef3b841e2db034b2f212a4a68");
//统计SDK是否支持采集在子进程中打点的自定义事件,默认不支持
UMConfigure.setProcessEvent(true);//支持多进程打点
MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO);
initPolyvCilent();
if (NIMUtil.isMainProcess(this)) {
//启动优化:建议在子线程中执行初始化
new Thread(new Runnable() {
@Override
public void run() {
PushHelper.init(getApplicationContext());
}
}).start();
} else {
//若不是主进程(":channel"结尾的进程),直接初始化sdk,不可在子线程中执行
PushHelper.init(getApplicationContext());
}
// // 微信设置
// PlatformConfig.setWeixin("wxbf3658f5e674667c","c4505a04a9910c65efea8e11ffc93f92");
// PlatformConfig.setWXFileProvider("cn.shangyu.gdxzExpert.fileprovider");
// // QQ设置
// PlatformConfig.setQQZone("101830139","5d63ae8858f1caab67715ccd6c18d7a5");
// PlatformConfig.setQQFileProvider("cn.shangyu.gdxzExpert.fileprovider");
// // 新浪微博设置
// PlatformConfig.setSinaWeibo("3921700954","04b48b094faeb16683c32669824ebdad","http://sns.whalecloud.com");
// PlatformConfig.setSinaFileProvider("cn.shangyu.gdxzExpert.fileprovider");
// SpeechUtility.createUtility(context, SpeechConstant.APPID +"=5975b26b");
initScreencast();
}
public void initScreencast() {
// TODO appId和appSecret需与包名绑定,获取方式请咨询Polyv技术支持
PolyvScreencastManager.init(this, "kZF19ndHgR63a2b0efd7b82707734951", "2AA1A-6648B-8F35D-7FB52", new WxDlnaSenderInitCallback() {
@Override
public void onSuccess() {
// 初始化单例
PolyvScreencastManager.getInstance(BaseApplication.this);
}
@Override
public void onFail(int code, String msg) {
}
});
}
/** 加密秘钥 */
private String aeskey = "VXtlHmwfS2oYm0CZ";
/** 加密向量 */
private String iv = "2u9gDPKdX6GyQJKU";
public void initPolyvCilent() {
//网络方式取得SDK加密串,(推荐)
//网络获取到的SDK加密串可以保存在本地SharedPreference中,下次先从本地获取
// new LoadConfigTask().execute();
PolyvSDKClient client = PolyvSDKClient.getInstance();
//使用SDK加密串来配置
client.setConfig("LysMwMlSFaiHu/03UrkCrxekGbFAZSXnnNkCi9QMdJPX2J5nTOHbwB626iIKXC6YvF+KYXGL3HStxEzHThvT61d9SNXpfKBF7i6NKd1VtFVAoOs+hg4FL2m7NoRsAO05j02uGzd/d9imbZvBchKP8w==", aeskey, iv, getApplicationContext());
//初始化SDK设置
client.initSetting(getApplicationContext());
//启动Bugly
// client.initCrashReport(getApplicationContext());
//启动Bugly后,在学员登录时设置学员id
// client.crashReportSetUserId(userId);
setDownloadDir();
// 设置下载队列总数,多少个视频能同时下载。(默认是1,设置负数和0是没有限制)
PolyvDownloaderManager.setDownloadQueueCount(1);
}
/**
* 设置下载视频目录
*/
private void setDownloadDir() {
String rootDownloadDirName = "polyvdownload";
ArrayList<File> externalFilesDirs = PolyvStorageUtils.getExternalFilesDirs(getApplicationContext());
if (externalFilesDirs.size() == 0) {
// TODO 没有可用的存储设备,后续不能使用视频缓存功能
return;
}
//SD卡会有SD卡接触不良,SD卡坏了,SD卡的状态错误的问题。
//我们在开发中也遇到了SD卡没有权限写入的问题,但是我们确定APP是有赋予android.permission.WRITE_EXTERNAL_STORAGE权限的。
//有些是系统问题,有些是SD卡本身的问题,这些问题需要通过重新拔插SD卡或者更新SD卡来解决。所以如果想要保存下载视频至SD卡请了解这些情况。
File downloadDir = new File(externalFilesDirs.get(0), rootDownloadDirName);
PolyvSDKClient.getInstance().setDownloadDir(downloadDir);
//兼容旧下载视频目录,如果新接入SDK,无需使用以下代码
//获取SD卡信息
PolyvDevMountInfo.getInstance().init(this, new PolyvDevMountInfo.OnLoadCallback() {
@Override
public void callback() {
//是否有可移除的存储介质(例如 SD 卡)或内部(不可移除)存储可供使用。
if (!PolyvDevMountInfo.getInstance().isSDCardAvaiable()) {
return;
}
//可移除的存储介质(例如 SD 卡),需要写入特定目录/storage/sdcard1/Android/data/包名/。
//现在PolyvDevMountInfo.getInstance().getExternalSDCardPath()默认返回的目录路径就是/storage/sdcard1/Android/data/包名/。
//跟PolyvDevMountInfo.getInstance().init(Context context, final OnLoadCallback callback)接口有区别,请保持同步修改。
ArrayList<File> subDirList = new ArrayList<>();
String externalSDCardPath = PolyvDevMountInfo.getInstance().getExternalSDCardPath();
if (!TextUtils.isEmpty(externalSDCardPath)) {
StringBuilder dirPath = new StringBuilder();
dirPath.append(externalSDCardPath).append(File.separator).append("polyvdownload");
File saveDir = new File(dirPath.toString());
if (!saveDir.exists()) {
saveDir.mkdirs();//创建下载目录
}
//设置下载存储目录
// PolyvSDKClient.getInstance().setDownloadDir(saveDir);
// return;
subDirList.add(saveDir);
}
//如果没有可移除的存储介质(例如 SD 卡),那么一定有内部(不可移除)存储介质可用,都不可用的情况在前面判断过了。
File saveDir = new File(PolyvDevMountInfo.getInstance().getInternalSDCardPath() + File.separator + "polyvdownload");
if (!saveDir.exists()) {
saveDir.mkdirs();//创建下载目录
}
//设置下载存储目录
// PolyvSDKClient.getInstance().setDownloadDir(saveDir);
subDirList.add(saveDir);
PolyvSDKClient.getInstance().setSubDirList(subDirList);
}
}, true);
}
public static Context getContext() {
return context;
}
public static int getMainThreadId() {
return mainThreadId;
}
public static Thread getMainThread() {
return mainThread;
}
public static Handler getHandler() {
return handler;
}
public static SharedPreferences getSharedPreferences() {
return preferences;
}
/**
* 保存当前的聊天界面所对应的联系人、方便来消息屏蔽通知
*/
private void setChattingContactId() {
try {
ECPreferences.savePreference(
ECPreferenceSettings.SETTING_CHATTING_CONTACTID, "", true);
} catch (InvalidClassException e) {
e.printStackTrace();
}
}
private void initImageLoader() {
// File cacheDir = StorageUtils.getOwnCacheDirectory(
// getApplicationContext(), "gdxzExpert/image11");
File cacheDir = StorageUtils.getOwnCacheDirectory(
getApplicationContext(), IMESSAGE_IMAGE);
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
this).threadPoolSize(1)
// 线程池内加载的数量
.threadPriority(Thread.NORM_PRIORITY - 2)
.memoryCache(new WeakMemoryCache())
// .denyCacheImageMultipleSizesInMemory()
.diskCacheFileNameGenerator(CCPAppManager.md5FileNameGenerator)
// 将保存的时候的URI名称用MD5 加密
.tasksProcessingOrder(QueueProcessingType.LIFO)
.diskCache(
new UnlimitedDiskCache(cacheDir, null,
CCPAppManager.md5FileNameGenerator))// 自定义缓存路径
// .diskCache(new UnlimitedDiskCache(cacheDir))//自定义缓存路径
.defaultDisplayImageOptions(DisplayImageOptions.createSimple())
// .writeDebugLogs() // Remove for release app
.build();// 开始构建
ImageLoader.getInstance().init(config);
}
@Override
public void onLowMemory() {
super.onLowMemory();
}
public static List<Activity> addCards;
public static void addActivity(Activity ma) {
if (addCards == null) {
addCards = new ArrayList<Activity>();
}
addCards.add(ma);
}
public static void finishActivity() {
if (addCards != null) {
for (int i = 0; i < addCards.size(); i++) {
addCards.get(i).finish();
}
}
}
// private void initX5WebView() {
//
// //搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。
// QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
// @Override
// public void onViewInitFinished(boolean arg0) {
// //x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
// Log.d("app", " onViewInitFinished is " + arg0);
//
// }
//
// @Override
// public void onCoreInitFinished() {
// }
// };
// //x5内核初始化接口
// QbSdk.initX5Environment(getApplicationContext(), cb);
//
// }
public static void hookWebView() {
int sdkInt = Build.VERSION.SDK_INT;
try {
Class<?> factoryClass = Class.forName("android.webkit.WebViewFactory");
Field field = factoryClass.getDeclaredField("sProviderInstance");
field.setAccessible(true);
Object sProviderInstance = field.get(null);
if (sProviderInstance != null) {
LogUtil.i("sProviderInstance isn't null");
return;
}
Method getProviderClassMethod;
if (sdkInt > 22) {
getProviderClassMethod = factoryClass.getDeclaredMethod("getProviderClass");
} else if (sdkInt == 22) {
getProviderClassMethod = factoryClass.getDeclaredMethod("getFactoryClass");
} else {
LogUtil.i("Don't need to Hook WebView");
return;
}
getProviderClassMethod.setAccessible(true);
Class<?> providerClass = (Class<?>) getProviderClassMethod.invoke(factoryClass);
Class<?> delegateClass = Class.forName("android.webkit.WebViewDelegate");
Constructor<?> providerConstructor = providerClass.getConstructor(delegateClass);
if (providerConstructor != null) {
providerConstructor.setAccessible(true);
Constructor<?> declaredConstructor = delegateClass.getDeclaredConstructor();
declaredConstructor.setAccessible(true);
sProviderInstance = providerConstructor.newInstance(declaredConstructor.newInstance());
LogUtil.i("sProviderInstance:{}", sProviderInstance+"");
field.set("sProviderInstance", sProviderInstance);
}
LogUtil.i("Hook done!");
} catch (Throwable e) {
LogUtil.i(e.getMessage());
}
}
/**
* 云信初始化
*/
public void YunXininit()
{
DemoCache.setContext(this);
// 4.6.0 开始,第三方推送配置入口改为 SDKOption#mixPushConfig,旧版配置方式依旧支持。
SDKOptions sdkOptions = NimSDKOptionConfig.getSDKOptions(this);
sdkOptions.disableAwake=true;
NIMClient.init(this, getLoginInfo(), sdkOptions);
// crash handler
// AppCrashHandler.getInstance(this);
// 以下逻辑只在主进程初始化时执行
if (NIMUtil.isMainProcess(this)) {
// 华为推送
ActivityMgr.INST.init(this);
// // 初始化OPPO PUSH服务,创建默认通道
HeytapPushManager.init(this, false);
// 注册自定义推送消息处理,这个是可选项
NIMPushClient.registerMixPushMessageHandler(new DemoMixPushMessageHandler());
// 初始化红包模块,在初始化UIKit模块之前执行
// NIMRedPacketClient.init(this);
// init pinyin
PinYin.init(this);
PinYin.validate();
// 初始化UIKit模块
initUIKit();
// 初始化消息提醒
NIMClient.toggleNotification(UserPreferences.getNotificationToggle());
//关闭撤回消息提醒
// NIMClient.toggleRevokeMessageNotification(false);
// 云信sdk相关业务初始化
NIMInitManager.getInstance().init(true);
NIMClient.getService(AuthServiceObserver.class).observeOnlineStatus(userStatusObserver, true);
// 初始化音视频模块
// initAVChatKit();
// // 初始化rts模块
// initRTSKit();
}
//初始化融合 SDK 中的七鱼业务关业务
// initMixSdk();
}
/**
* 用户状态变化
*/
Observer<StatusCode> userStatusObserver = new Observer<StatusCode>() {
@Override
public void onEvent(StatusCode code) {
if (code.wontAutoLogin()) {
if(code!=StatusCode.PWD_ERROR)
{
IUniMP uniapp_MP = BaseApplication.getUniMPCaches().get(uniapp_mp_appid);
if(uniapp_MP != null && uniapp_MP.isRunning()){
uniapp_MP.closeUniMP();
}
LogoutHelper.logout();
showlogout();
}
}
}
};
private void showlogout()
{
String phone="ios";
switch(NIMClient.getService(AuthService.class).getKickedClientType())
{
case 1:
phone="android";
break;
case 2:
phone="ios";
break;
case 16:
phone="web";
break;
default:
phone="";
break;
}
if(!StringUtil.isEmpty(phone))
{
Intent intent = new Intent(getApplicationContext(), LoginNewActivity.class);
intent.putExtra("kick_out",phone);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
private LoginInfo getLoginInfo() {
String account = Preferences.getUserAccount();
String token = Preferences.getUserToken();
if (!TextUtils.isEmpty(account) && !TextUtils.isEmpty(token)) {
DemoCache.setAccount(account.toLowerCase());
return new LoginInfo(account, token);
} else {
return null;
}
}
private void initUIKit() {
// 防止重复初始化
if (isUIKitInitialized) {
return;
}
try {
// 初始化
// NimUIKit.init(this, buildUIKitOptions());
NimUIKit.init(this, buildUIKitOptions(),null,new DefaultContactProvider());
// 设置地理位置提供者。如果需要发送地理位置消息,该参数必须提供。如果不需要,可以忽略。
// NimUIKit.setLocationProvider(new NimDemoLocationProvider());
// IM 会话窗口的定制初始化。
SessionHelper.init();
// 聊天室聊天窗口的定制初始化。
ChatRoomSessionHelper.init();
// 通讯录列表定制初始化
ContactHelper.init();
// 添加自定义推送文案以及选项,请开发者在各端(Android、IOS、PC、Web)消息发送时保持一致,以免出现通知不一致的情况
NimUIKit.setCustomPushContentProvider(new DemoPushContentProvider());
NimUIKit.setOnlineStateContentProvider(new DemoOnlineStateContentProvider());
isUIKitInitialized = true;
LogUtil.i("UIKit初始化成功");
} catch (Exception e) {
LogUtil.e("UIKit初始化失败: " + e.getMessage());
e.printStackTrace();
}
}
private UIKitOptions buildUIKitOptions() {
UIKitOptions options = new UIKitOptions();
// 设置app图片/音频/日志等缓存目录
options.appCacheDir = NimSDKOptionConfig.getAppCacheDir(this) + "/app";
return options;
}
}