pandorapan/app/src/main/java/com/shayu/phonelive/AppContext.java

453 lines
18 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.shayu.phonelive;
import static com.yunbao.live.socket.SocketClient.mSocketHandler;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.net.http.HttpResponseCache;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.Process;
import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.alibaba.android.arouter.launcher.ARouter;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.blankj.utilcode.util.Utils;
import com.facebook.appevents.AppEventsLogger;
import com.fm.openinstall.OpenInstall;
import com.google.gson.Gson;
import com.shayu.phonelive.utils.LogUtils;
import com.tencent.imsdk.v2.V2TIMGroupMemberInfo;
import com.tencent.imsdk.v2.V2TIMManager;
import com.tencent.imsdk.v2.V2TIMSimpleMsgListener;
import com.tencent.imsdk.v2.V2TIMUserInfo;
import com.umeng.analytics.MobclickAgent;
import com.umeng.commonsdk.UMConfigure;
import com.yunbao.common.BuildConfig;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.CommonAppContext;
import com.yunbao.common.Constants;
import com.yunbao.common.bean.AnchorStartLiveBean;
import com.yunbao.common.bean.CrashSaveBean;
import com.yunbao.common.event.SudGameSocketImEvent;
import com.yunbao.common.manager.imrongcloud.InstructorSendReward;
import com.yunbao.common.manager.imrongcloud.InstructorSendRewardProvider;
import com.yunbao.common.manager.imrongcloud.MessageIMManager;
import com.yunbao.common.manager.imrongcloud.RecommendLiveRoom;
import com.yunbao.common.manager.imrongcloud.RongcloudIMManager;
import com.yunbao.common.message.content.MessageChatCardContent;
import com.yunbao.common.message.content.MessageChatTipsContent;
import com.yunbao.common.provider.MessageChatCardItemProvider;
import com.yunbao.common.provider.MessageChatTipsItemProvider;
import com.yunbao.common.utils.AppManager;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.GoogleUtils;
import com.yunbao.common.utils.L;
import com.yunbao.common.utils.MessageChatNotifyManager;
import com.yunbao.common.utils.MessageSayHiNotifyManager;
import com.yunbao.common.utils.SpUtil;
import com.yunbao.live.activity.LiveActivity;
import com.yunbao.live.activity.SudGameActivity;
import com.yunbao.live.socket.SocketReceiveBean;
import com.yunbao.live.socket.SocketRyClient;
import com.yunbao.live.utils.LiveImDeletUtil;
import com.yunbao.live.views.PortraitLiveManager;
import com.yunbao.live.views.RecommendLiveRoomProvider;
import com.yunbao.main.activity.CompleteUserInfoActivity;
import com.yunbao.main.activity.EntryActivity;
import com.yunbao.main.activity.LoginActivity;
import com.yunbao.main.activity.MainActivity;
import com.yunbao.main.activity.MainHomeCommunityActivity;
import com.yunbao.main.activity.MsgSettActivity;
import com.yunbao.main.activity.PDLiveConversationActivity;
import com.yunbao.video.activity.VideoPlayActivity;
import org.greenrobot.eventbus.EventBus;
import java.io.File;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import io.rong.imkit.config.RongConfigCenter;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.MessageContent;
import io.rong.message.TextMessage;
//import cn.tillusory.sdk.TiSDK;
//import com.squareup.leakcanary.LeakCanary;
/**
* Created by cxf on 2017/8/3.
*/
public class AppContext extends CommonAppContext {
public static AppContext sInstance;
public LiveImDeletUtil liveImDeletUtil;
private final static List<WeakReference<Activity>> activities = new ArrayList<>();
private static final class AdjustLifecycleCallbacks implements ActivityLifecycleCallbacks {
@Override
public void onActivityResumed(Activity activity) {
Log.e("打招呼定时器", "onActivityResumed: " + activity);
if (activity instanceof LiveActivity) {
MessageSayHiNotifyManager.getInstance().stop();
return;
}
if (activity instanceof PDLiveConversationActivity) {
MessageSayHiNotifyManager.getInstance().stop();
return;
}
if (activity instanceof MainHomeCommunityActivity) {
MessageSayHiNotifyManager.getInstance().stop();
return;
}
if (activity instanceof SudGameActivity) {
MessageSayHiNotifyManager.getInstance().stop();
return;
}
if (activity instanceof MainActivity && !MessageSayHiNotifyManager.getInstance().isInit()) {
return;
}
if (activity instanceof CompleteUserInfoActivity) {
MessageSayHiNotifyManager.getInstance().stop();
return;
}
if (activity instanceof VideoPlayActivity) {
MessageSayHiNotifyManager.getInstance().stop();
return;
}
if (activity instanceof LoginActivity) {
MessageSayHiNotifyManager.getInstance().stop();
return;
}
if (activity instanceof EntryActivity) {
MessageSayHiNotifyManager.getInstance().stop();
return;
}
MessageSayHiNotifyManager.getInstance().reload();
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(@NonNull Activity activity) {
}
@Override
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {
}
@Override
public void onActivityDestroyed(@NonNull Activity activity) {
for (WeakReference<Activity> reference : activities) {
if (reference.get() == activity) {
activities.remove(reference);
return;
}
}
AppManager.getInstance().removeActivity(activity);
}
@Override
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
activities.add(new WeakReference<>(activity));
CrashSaveBean.getInstance().setActivitySize(activities);
AppManager.getInstance().addActivity(activity);
}
@Override
public void onActivityStarted(@NonNull Activity activity) {
}
}
@Override
public void onCreate() {
super.onCreate();
if (!isMainProcess()) {
return;
}
CrashSaveBean.getInstance().setStartTime(System.currentTimeMillis());
//注册全局异常捕获
registerError();
registerFirebaseCrash();
LogUtils.start(this);
sInstance = this;
L.setDeBug(BuildConfig.DEBUG);
AppEventsLogger.activateApp(this);
File httpCacheDir = new File(getCacheDir(), "https");
try {
HttpResponseCache.install(httpCacheDir, 1024 * 1024 * 128);
} catch (IOException e) {
e.printStackTrace();
}
//初始化 ARouter
if (BuildConfig.DEBUG) {
ARouter.openLog();
ARouter.openDebug();
}
ARouter.init(this);
//初始化 邀请码库
if (isMainProcess()) {
OpenInstall.init(this);
}
//设置LOG开关默认为false
UMConfigure.setLogEnabled(true);
//友盟正式初始化
UMConfigure.init(getApplicationContext(), "64e40ee55488fe7b3afa2c96", "PDLive", UMConfigure.DEVICE_TYPE_PHONE, "64e40ee55488fe7b3afa2c96");
//集成umeng-crash-vx.x.x.aar则需要关闭原有统计SDK异常捕获功能
MobclickAgent.setCatchUncaughtExceptions(false);
//PushSDK初始化(如使用推送SDK必须调用此方法)
//统计SDK是否支持采集在子进程中打点的自定义事件默认不支持
UMConfigure.setProcessEvent(true);//支持多进程打点
MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO);
UMConfigure.submitPolicyGrantResult(getApplicationContext(), true);
registerActivityLifecycleCallbacks(new AdjustLifecycleCallbacks());
//初始化 AndroidUtilCode
Utils.init(this);
liveImDeletUtil = new LiveImDeletUtil();
//初始化融云
RongcloudIMManager.initRongIM(this);
ArrayList<Class<? extends MessageContent>> myMessages = new ArrayList<>();
myMessages.add(RecommendLiveRoom.class);
myMessages.add(InstructorSendReward.class);
myMessages.add(MessageChatTipsContent.class);
myMessages.add(MessageChatCardContent.class);
RongIMClient.registerMessageType(myMessages);
// 注册自定义消息模板
RongConfigCenter.conversationConfig().addMessageProvider(new InstructorSendRewardProvider(getApplicationContext()));
RongConfigCenter.conversationConfig().addMessageProvider(new RecommendLiveRoomProvider(getApplicationContext()));
RongConfigCenter.conversationConfig().addMessageProvider(new MessageChatTipsItemProvider(getApplicationContext()));
RongConfigCenter.conversationConfig().addMessageProvider(new MessageChatCardItemProvider(getApplicationContext()));
//注册屏蔽push弹窗的类
MessageChatNotifyManager.getInstance().addShieldClass(CompleteUserInfoActivity.class);
MessageChatNotifyManager.getInstance().addShieldClass(PDLiveConversationActivity.class);
RongcloudIMManager.addRongcloudIMOnReceiveMessageListener(new RongIMClient.OnReceiveMessageWrapperListener() {
@Override
public boolean onReceived(io.rong.imlib.model.Message message, int i, boolean b, boolean b1) {
Log.e("wewe", message.getConversationType() + "112121");
MessageIMManager.get(sInstance).getSystemForRongcloud(message);
//融云直播间聊天
Message msg = Message.obtain();
msg.what = Constants.SOCKET_WHAT_BROADCAST;
try {
if (!"".equals(message.getContent()) && message.getContent() != null) {
TextMessage content = (TextMessage) message.getContent();
if (content.getContent().contains("_method_")) {
msg.obj = content.getContent();
//观众页面
if (SocketRyClient.mSocketHandler != null && (TextUtils.equals("__system__", message.getTargetId()) || ("g" + PortraitLiveManager.liveID).contains(message.getTargetId()))) {
SocketRyClient.mSocketHandler.sendMessage(msg);
} else if (content.getContent().contains("LivePK_anchorStartLiveNotify")) {//开播通知
SocketReceiveBean received = JSON.parseObject(content.getContent(), SocketReceiveBean.class);
JSONObject map = received.getMsg().getJSONObject(0);
sendStartAnchorLive(map);
} else if (message.getTargetId().contains("v")) {
String contentJson = ((TextMessage) message.getContent()).getContent();
Log.e("wewe", contentJson);
SudGameSocketImEvent sudGameSocketImEvent = new Gson().fromJson(contentJson, SudGameSocketImEvent.class);
Bus.get().post(sudGameSocketImEvent);
}
//主播页面
if (TextUtils.isEmpty(PortraitLiveManager.liveID) && SocketRyClient.mSocketHandler != null) {
SocketRyClient.mSocketHandler.sendMessage(msg);
}
} else if (message.getConversationType() == Conversation.ConversationType.PRIVATE) {//私聊信息
EventBus.getDefault().post(message);
if (AppManager.getInstance().getLastActivity() instanceof CompleteUserInfoActivity) {
return false;
}
if (message.getReceivedStatus().isRead()) {
return false;
}
RongIMClient.getInstance().getUnreadCount(Conversation.ConversationType.PRIVATE, message.getTargetId(), new RongIMClient.ResultCallback<Integer>() {
@Override
public void onSuccess(Integer integer) {
if (integer > 0) {
MessageChatNotifyManager.getInstance().push(AppManager.getInstance().getLastActivity()
, message.getTargetId(),
content.getContent()
);
}
}
@Override
public void onError(RongIMClient.ErrorCode e) {
}
});
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
private void sendStartAnchorLive(JSONObject map) {
AnchorStartLiveBean bean = new AnchorStartLiveBean();
bean.setAnchorName(map.getString("anchorName"));
bean.setRoomId(map.getString("roomid"));
bean.setAvatar(map.getString("avatar"));
EventBus.getDefault().post(bean);
}
});
//监听im消息
V2TIMManager.getInstance().addSimpleMsgListener(new V2TIMSimpleMsgListener() {
@Override
public void onRecvGroupTextMessage(String msgID, String groupID, V2TIMGroupMemberInfo sender, String text) {
super.onRecvGroupTextMessage(msgID, groupID, sender, text);
Log.e("asasas", text);
Message msg = Message.obtain();
msg.what = Constants.SOCKET_WHAT_BROADCAST;
msg.obj = text;
if (mSocketHandler != null && Ingroup == 1) {
mSocketHandler.sendMessage(msg);
}
}
@Override
public void onRecvC2CTextMessage(String msgID, V2TIMUserInfo sender, String text) {
super.onRecvC2CTextMessage(msgID, sender, text);
Message msg = Message.obtain();
msg.what = Constants.SOCKET_WHAT_BROADCAST;
msg.obj = text;
if (mSocketHandler != null) {
CommonAppContext.Ingroup = 1;
mSocketHandler.sendMessage(msg);
}
}
});
configSPApp();
//初始化美颜SDK
// FaceManager.initFaceUnity(this);
}
/**
* 配置SharedPreferences默认值
*/
private void configSPApp() {
if (!SpUtil.getInstance().isExists(MsgSettActivity.SWITCH_PRIVATE_CHAT_MSG)) {
SpUtil.getInstance().setBooleanValue(MsgSettActivity.SWITCH_PRIVATE_CHAT_MSG, true);
}
}
public boolean isMainProcess() {
int pid = android.os.Process.myPid();
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
if (activityManager.getRunningAppProcesses() == null) {
return true;
}
for (ActivityManager.RunningAppProcessInfo appProcess : activityManager.getRunningAppProcesses()) {
if (appProcess.pid == pid) {
return getApplicationInfo().packageName.equals(appProcess.processName);
}
}
return false;
}
@Override
public void onTerminate() {
RongcloudIMManager.removeRongcloudIMOnReceiveMessageListener();
super.onTerminate();
}
/**
* 注册全局异常捕获有需要时可以在onCreate调用
*/
private void registerError() {
NeverCrashUtils.getInstance().setDebugMode(BuildConfig.DEBUG).setMainCrashHandler((t, e) -> {
Log.e("ApplicationError", "主线程异常");//此处log只是展示当debug为true时主类内部log会打印异常信息
e.printStackTrace();
AppManager.runDebugCode(() -> {
//闪退后finish所有Activity并且杀死进程
for (WeakReference<Activity> activity : activities) {
if (activity != null && activity.get() != null) {
activity.get().finish();
}
}
setFirebaseCrashData();
Process.killProcess(Process.myPid());
System.exit(0);
new Handler(Looper.getMainLooper()).postDelayed(() -> {
throw new RuntimeException(e);
}, 100);
});
}).setUncaughtCrashHandler((t, e) -> {
Log.e("ApplicationError", "子线程异常");//此处log只是展示当debug为true时主类内部log会打印异常信息
e.printStackTrace();
}).register(this);
}
public void registerFirebaseCrash() {
if (!CommonAppConfig.IS_UPLOAD_ERROR_LOG) {
return;
}
if (CommonAppConfig.IS_GOOGLE_PLAY != 2) {
GoogleUtils.newInstance(this).initializeApp(this);
}
}
public static void setFirebaseCrashData() {
if (!CommonAppConfig.IS_UPLOAD_ERROR_LOG) {
return;
}
String uid = CommonAppConfig.getInstance().getUid();
if (CommonAppConfig.IS_GOOGLE_PLAY != 2) {
GoogleUtils.newInstance(sInstance).setFirebaseCrashData(
uid,
SpUtil.getInstance().getStringValue(SpUtil.USER_INFO),
String.valueOf(CommonAppConfig.IS_GOOGLE_PLAY),
Arrays.toString(Build.SUPPORTED_ABIS),
String.valueOf(CrashSaveBean.getInstance().getStartTime()),
String.valueOf(CrashSaveBean.getInstance().getEnterRoom()),
String.valueOf(CrashSaveBean.getInstance().getSlidingRoom()),
String.valueOf(CrashSaveBean.getInstance().getPlaySvga()), CrashSaveBean.getInstance().getActivitySize());
}
}
}