Files
yusheng-android/moduleUtil/src/main/java/com/qxcm/moduleutil/base/CommonAppContext.java
梁小江 fcb27eaa76 对接语圈接口,
页面基本完成,评论完成一半,需要再调试
2025-05-30 19:01:54 +08:00

334 lines
12 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.qxcm.moduleutil.base;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.Application;
import android.app.LauncherActivity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Base64;
import android.webkit.WebView;
import androidx.multidex.MultiDex;
import androidx.multidex.MultiDexApplication;
import com.blankj.utilcode.util.AppUtils;
import com.blankj.utilcode.util.LogUtils;
import com.blankj.utilcode.util.ProcessUtils;
import com.blankj.utilcode.util.ServiceUtils;
import com.lahm.library.EasyProtectorLib;
import com.lahm.library.EmulatorCheckCallback;
import com.qxcm.moduleutil.bean.UserBean;
import com.qxcm.moduleutil.event.AppLifecycleEvent;
import com.qxcm.moduleutil.interfaces.AppLifecycleUtil;
import com.qxcm.moduleutil.utils.FloatWindowHelper;
import com.qxcm.moduleutil.utils.SPConstants;
import com.qxcm.moduleutil.utils.SpUtil;
import com.qxcm.moduleutil.utils.UtilConfig;
import com.qxcm.moduleutil.utils.config.EnvironmentEnum;
import com.qxcm.moduleutil.utils.config.EnvironmentPrefs;
import com.qxcm.moduleutil.widget.CommonAppConfig;
import com.qxcm.moduleutil.widget.Constants;
import com.qxcm.moduleutil.widget.CustomRefreshHeader;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.DefaultRefreshFooterCreator;
import com.scwang.smartrefresh.layout.api.DefaultRefreshHeaderCreator;
import com.scwang.smartrefresh.layout.api.RefreshFooter;
import com.scwang.smartrefresh.layout.api.RefreshHeader;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
import org.greenrobot.eventbus.EventBus;
import java.lang.reflect.Method;
import java.security.MessageDigest;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import io.reactivex.disposables.Disposable;
import lombok.Getter;
/**
* Created by cxf on 2017/8/3.
*/
public class CommonAppContext extends MultiDexApplication {
private static CommonAppContext sInstance;
private static Handler sMainThreadHandler;
private int mCount;
private boolean mFront;//是否前台
public String emulator = "0";
@Getter
private EnvironmentEnum currentEnvironment;
public UserBean mUserBean;
private final ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
private ScheduledExecutorService scheduledExecutorServiceRoom = null;
@Override
public void onCreate() {
super.onCreate();
sInstance = this;
sMainThreadHandler=new Handler();
UtilConfig.init(this);
registerActivityLifecycleCallbacks();
initWebView();
if (ProcessUtils.isMainProcess()) {
if (SpUtil.isAgreePolicy()) {
checkInEmulator();
UtilConfig.checkInEmulator();
}
}
EnvironmentPrefs prefs = new EnvironmentPrefs(this);
currentEnvironment = prefs.getSelectedEnvironment();
}
private void initWebView() {
//Android P 以及之后版本不支持同时从多个进程使用具有相同数据目录的WebView
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
String processName = getProcessName(this);
if (!AppUtils.getAppPackageName().equals(processName)) {//判断不等于默认进程名称
WebView.setDataDirectorySuffix(processName);
}
}
}
public String getProcessName(Context context) {
if (context == null) return null;
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
if (processInfo.pid == android.os.Process.myPid()) {
return processInfo.processName;
}
}
return null;
}
@Override
protected void attachBaseContext(Context base) {
MultiDex.install(this);
super.attachBaseContext(base);
}
public static CommonAppContext getInstance() {
if (sInstance == null) {
try {
Class clazz = Class.forName("android.app.ActivityThread");
Method method = clazz.getMethod("currentApplication", new Class[]{});
Object obj = method.invoke(null, new Object[]{});
if (obj != null && obj instanceof CommonAppContext) {
sInstance = (CommonAppContext) obj;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return sInstance;
}
public void checkInEmulator() {
emulator = EasyProtectorLib.checkIsRunningInEmulator(this, new EmulatorCheckCallback() {
@Override
public void findEmulator(String emulatorInfo) {
// Logger.e(emulatorInfo);
}
}) ? "1" : "0";
}
public static void postDelayed(Runnable runnable, long delayMillis) {
if (sMainThreadHandler != null) {
sMainThreadHandler.postDelayed(runnable, delayMillis);
}
}
public static void post(Runnable runnable) {
if (sMainThreadHandler != null) {
sMainThreadHandler.post(runnable);
}
}
public String getToken() {
return SpUtil.getToken();
}
private void registerActivityLifecycleCallbacks() {
registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
mCount++;
if (!mFront) {
mFront = true;
LogUtils.e("AppContext------->处于前台");
EventBus.getDefault().post(new AppLifecycleEvent(true));
CommonAppConfig.getInstance().setFrontGround(true);
FloatWindowHelper.setFloatWindowVisible(true);
AppLifecycleUtil.onAppFrontGround();
}
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
mCount--;
if (mCount == 0) {
mFront = false;
LogUtils.e("AppContext------->处于后台");
EventBus.getDefault().post(new AppLifecycleEvent(false));
CommonAppConfig.getInstance().setFrontGround(false);
FloatWindowHelper.setFloatWindowVisible(false);
AppLifecycleUtil.onAppBackGround();
}
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
});
}
/**
* 获取App签名md5值
*/
public String getAppSignature() {
try {
PackageInfo info =
this.getPackageManager().getPackageInfo(this.getPackageName(),
PackageManager.GET_SIGNATURES);
if (info != null) {
Signature[] signs = info.signatures;
byte[] bytes = signs[0].toByteArray();
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(bytes);
bytes = md.digest();
StringBuilder stringBuilder = new StringBuilder(2 * bytes.length);
for (int i = 0; ; i++) {
if (i >= bytes.length) {
return stringBuilder.toString();
}
String str = Integer.toString(0xFF & bytes[i], 16);
if (str.length() == 1) {
str = "0" + str;
}
stringBuilder.append(str);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取facebook散列秘钥
*/
public String getFacebookHashKey() {
try {
PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
return Base64.encodeToString(md.digest(), Base64.DEFAULT);
}
} catch (Exception e) {
return "get error";
}
return null;
}
public boolean isFront() {
return mFront;
}
public void startInitSdk(){
}
public void setUser(UserBean userBean) {
mUserBean = userBean;
SpUtil.saveUserId(userBean.getUser_id());
SpUtil.saveUserInfo(userBean);
SpUtil.putToken(userBean.getToken());
}
public UserBean getUser() {
if (mUserBean == null) {
mUserBean = SpUtil.getUserInfo();
}
return mUserBean;
}
public void setUserBean(UserBean bean) {
mUserBean = bean;
}
public void clearLoginInfo() throws ClassNotFoundException {
// mUid = null;
// mToken = null;
// SpUtil.getInstance().removeValue(
// SPConstants.USER_ID, SPConstants.TOKEN, SPConstants.USER_INFO
// );
mUserBean = null;
SpUtil.saveUserId(-1);
SpUtil.saveUserInfo(new UserBean());
SpUtil.putToken("");
Intent intent = new Intent("com.example.action.LAUNCH_PAGE");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(intent);
}
public static boolean isAlipayInstalled(Context context){
try {
context.getPackageManager().getPackageInfo("com.eg.android.AlipayGphone", 0);
return true;//安装了支付宝
} catch (PackageManager.NameNotFoundException e) {
return false; //未安装支付宝
}
}
//static 代码段可以防止内存泄露
static {
//设置全局的Header构建器
SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() {
@Override
public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
return new CustomRefreshHeader(context);//.setTimeFormat(new DynamicTimeFormat("更新于 %s"));//指定为经典Header默认是 贝塞尔雷达Header
}
});
//设置全局的Footer构建器
SmartRefreshLayout.setDefaultRefreshFooterCreator(new DefaultRefreshFooterCreator() {
@Override
public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {
ClassicsFooter classicsFooter = new ClassicsFooter(context);
classicsFooter.setDrawableSize(20);
classicsFooter.setFinishDuration(0);
//指定为经典Footer默认是 BallPulseFooter
return classicsFooter;
}
});
}
}