Files
CubeAoleyunSN/app/src/main/java/com/aoleyun/sn/base/BaseApplication.java

320 lines
11 KiB
Java

package com.aoleyun.sn.base;
import android.os.Handler;
import android.os.Looper;
import android.text.TextUtils;
import android.util.Log;
import androidx.multidex.MultiDexApplication;
import com.alibaba.sdk.android.push.CloudPushService;
import com.alibaba.sdk.android.push.CommonCallback;
import com.alibaba.sdk.android.push.noonesdk.PushInitConfig;
import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory;
import com.aoleyun.sn.BuildConfig;
import com.aoleyun.sn.manager.ConnectManager;
import com.aoleyun.sn.manager.FileManager;
import com.aoleyun.sn.manager.MapManager;
import com.aoleyun.sn.network.NetInterfaceManager;
import com.aoleyun.sn.push.PushManager;
import com.aoleyun.sn.rlog.LogDBManager;
import com.aoleyun.sn.utils.JGYUtils;
import com.aoleyun.sn.utils.ToastUtil;
import com.aoleyun.sn.utils.Utils;
import com.aoleyun.sn.utils.WiFiUtils;
import com.aoleyun.sn.utils.XAPKUtils;
import com.arialyy.aria.core.Aria;
import com.tencent.bugly.crashreport.CrashReport;
import com.tencent.mmkv.MMKV;
import java.util.concurrent.TimeUnit;
import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.core.ObservableEmitter;
import io.reactivex.rxjava3.core.ObservableOnSubscribe;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
public class BaseApplication extends MultiDexApplication {
private static final String TAG = BaseApplication.class.getSimpleName();
@Override
public void onCreate() {
super.onCreate();
//非主进程不初始化
// if (SystemUtils.isMainProcessName(this, Process.myPid())) {
init();
// }
}
private void init() {
if (!BuildConfig.DEBUG) {
catchException();
}
String rootDir = MMKV.initialize(this);
Log.e(TAG, "mmkv root: " + rootDir);
CrashReport.initCrashReport(getApplicationContext(), "b16b3c7f1a", false);
CrashReport.setDeviceId(this, Utils.getSerial(this));
xcrash.XCrash.init(this);
PushManager.init(this);
initRegisterObservable();
initAliasObservable();
initTagObservable();
aliyunPushInit();
NetInterfaceManager.init(this);
JGYUtils.init(this);
WiFiUtils.init(this);
XAPKUtils.init(this);
LogDBManager.init(this);
FileManager.init(this);
ConnectManager.init(this);
MapManager.init(this);
MapManager.getInstance().initMap();
JGYUtils.getInstance().hookWebView();
Aria.init(this);
Aria.get(this).getDownloadConfig().setMaxTaskNum(1);
Aria.get(this).getDownloadConfig().setConvertSpeed(true);
}
private void catchException() {
Thread.setDefaultUncaughtExceptionHandler(
new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
Log.e("捕获异常子线程:", Thread.currentThread().getName() +
"在:" + e.getStackTrace()[0].getClassName());
}
}
);
//下面是新增方法!
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
while (true) {
try {
Looper.loop(); //会先执行这个方法,然后在执行下面的异常捕获方法!
} catch (Exception e) {
Log.e("捕获异常主线程:", Thread.currentThread().getName() + "在:" + e.getStackTrace()[0].getClassName());
e.printStackTrace();
}
}
}
});
}
interface OnRegisterResult {
void onResult(String code);
}
private static OnRegisterResult mOnRegisterResult;
private void initRegisterObservable() {
Log.e(TAG, "initTagObservable: ");
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) {
mOnRegisterResult = new OnRegisterResult() {
@Override
public void onResult(String code) {
Log.e("initRegisterObservable", "onResult: " + code);
emitter.onNext(code);
}
};
}
}).throttleLast(60, TimeUnit.SECONDS)
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String code) {
Log.e("initRegisterObservable", "onNext: " + code);
switch (code) {
case "PUSH_20110":
break;
default:
Log.e("initRegisterObservable", "onNext: 重新注册aliyunPush");
aliyunPushInit();
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
private void aliyunPushInit() {
// 特殊场景 需要定时拉起channel
PushInitConfig config = new PushInitConfig.Builder()
.application(this)
.loopStartChannel(true)
.loopInterval(60 * 10 * 1000)
.build();
PushServiceFactory.init(config);
CloudPushService pushService = PushServiceFactory.getCloudPushService();
pushService.setLogLevel(CloudPushService.LOG_DEBUG);
pushService.register(this, new CommonCallback() {
@Override
public void onSuccess(String response) {
Log.e("AliyunPush", "init cloudchannel success");
Log.e("AliyunPush", "init cloudchannel success " + pushService.getDeviceId());
setAlias();
}
@Override
public void onFailed(String errorCode, String errorMessage) {
Log.e("AliyunPush", "init cloudchannel failed -- errorcode:" + errorCode + " -- errorMessage:" + errorMessage);
mOnRegisterResult.onResult(errorCode);
}
});
}
interface OnAliasResult {
void onResult(String code);
}
private static OnAliasResult mOnAliasResult;
private void initAliasObservable() {
Log.e(TAG, "initAliasObservable: ");
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
mOnAliasResult = new OnAliasResult() {
@Override
public void onResult(String code) {
Log.e("initAliasObservable", "onResult: " + code);
emitter.onNext(code);
}
};
}
}).throttleLast(60, TimeUnit.SECONDS)
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String code) {
Log.e("initAliasObservable", "onNext: " + code);
switch (code) {
case "PUSH_20101":
aliyunPushInit();
break;
default:
setAlias();
break;
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
private void setAlias() {
final CloudPushService pushService = PushServiceFactory.getCloudPushService();
String sn = Utils.getSerial(BaseApplication.this);
if (TextUtils.isEmpty(sn)) {
return;
}
pushService.bindAccount(sn, new CommonCallback() {
@Override
public void onSuccess(String s) {
Log.e("AliyunPush", "bind account " + sn + " success\n");
}
@Override
public void onFailed(String errorCode, String errorMsg) {
Log.e("AliyunPush", "bind account " + sn + " failed." +
"errorCode: " + errorCode + ", errorMsg:" + errorMsg);
mOnAliasResult.onResult(errorCode);
}
});
pushService.addAlias(sn, new CommonCallback() {
@Override
public void onSuccess(String s) {
Log.e("AliyunPush", "add alias " + sn + " success\n");
}
@Override
public void onFailed(String errorCode, String errorMsg) {
Log.e("AliyunPush", "add alias " + sn + " failed." +
"errorCode: " + errorCode + ", errorMsg:" + errorMsg + "\n");
mOnAliasResult.onResult(errorCode);
}
});
}
public static void onTagOperatorResult(String code) {
onTagResult.onResult(code);
}
private static OnTagResult onTagResult;
interface OnTagResult {
void onResult(String code);
}
private static void initTagObservable() {
Log.e(TAG, "initTagObservable: ");
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) {
onTagResult = new OnTagResult() {
@Override
public void onResult(String code) {
Log.e("initTagObservable", "onResult: " + code);
emitter.onNext(code);
}
};
}
}).throttleLast(60, TimeUnit.SECONDS)
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String code) {
Log.e("initTagObservable", "onNext: " + code);
NetInterfaceManager.getInstance().setPushTags();
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
}