Files
HouseProperty/app/src/main/java/com/sl/house_property/MyApplication.java
2021-12-13 15:09:32 +08:00

221 lines
10 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.sl.house_property;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.os.StrictMode;
import android.util.Log;
import androidx.multidex.MultiDex;
import com.lzy.ninegrid.NineGridView;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.cache.CacheEntity;
import com.lzy.okgo.cache.CacheMode;
import com.lzy.okgo.cookie.CookieJarImpl;
import com.lzy.okgo.cookie.store.DBCookieStore;
import com.lzy.okgo.https.HttpsUtils;
import com.lzy.okgo.interceptor.HttpLoggingInterceptor;
import com.lzy.okgo.model.HttpHeaders;
import com.lzy.okgo.model.HttpParams;
import com.sl.house_property.db.dao.DataBaseHelper;
import com.tencent.bugly.Bugly;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;
import javax.net.ssl.X509TrustManager;
import cn.jpush.android.api.JPushInterface;
import okhttp3.OkHttpClient;
import fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard;
import utils.NineImageLoader;
//import cn.jpush.im.android.api.JMessageClient;
/**
* Created by 90432 on 2018/1/15.
*/
public class MyApplication extends Application {
//private static final String TAG = "JIGUANG-Example";
private static final String TAG = MyApplication.class.getSimpleName();
public static Context context;
protected static MyApplication instance;
public JCVideoPlayerStandard VideoPlaying;
/* private HttpNet httpNet;
public static Handler getTheErrorHandler;
public static boolean mainonce;
*/
public static Context getContext() {
return context;
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
public static MyApplication getApp() {
return instance;
}
public void existActivitys() {
for (Activity act : activityList) {
act.finish();
}
}
public void addActivitys(Activity activity) {
activityList.add(activity);
}
private List<Activity> activityList = new LinkedList<Activity>();
@Override
public void onCreate() {
Log.d(TAG, "[ExampleApplication] onCreate");
super.onCreate();
instance = this;
initOkGo();
// CrashHandler crashHandler = CrashHandler.getInstance();
// crashHandler.init(this);
if (getSharedPreferences("first", Context.MODE_PRIVATE).getInt("first", 0) == 1) {
JPushInterface.init(this);
JPushInterface.setDebugMode(false);
Bugly.init(this, "d45325664f", false);
}
// System.setProperty("http.proxyHost", "haotian.hoheng.cn");
// System.setProperty("http.proxyPort", "8080");
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
NineGridView.setImageLoader(new NineImageLoader());
DataBaseHelper.initOrmLite(this);
}
public static final String MESSAGE_RECEIVED_ACTION = "com.example.jpushdemo.MESSAGE_RECEIVED_ACTION";
public static final String KEY_MESSAGE = "message";
public static final String KEY_EXTRAS = "extras";
public void exit() {
for (Activity act : activityList) {
act.finish();
}
System.exit(0);
}
private void initOkGo() {
//---------这里给出的是示例代码,告诉你可以这么传,实际使用的时候,根据需要传,不需要就不传-------------//
HttpHeaders headers = new HttpHeaders();
headers.put("commonHeaderKey1", "commonHeaderValue1"); //header不支持中文不允许有特殊字符
headers.put("commonHeaderKey2", "commonHeaderValue2");
HttpParams params = new HttpParams();
params.put("commonParamsKey1", "commonParamsValue1"); //param支持中文,直接传,不要自己编码
params.put("commonParamsKey2", "这里支持中文参数");
//----------------------------------------------------------------------------------------//
OkHttpClient.Builder builder = new OkHttpClient.Builder();
//log相关
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor("OkGo");
loggingInterceptor.setPrintLevel(HttpLoggingInterceptor.Level.BODY); //log打印级别决定了log显示的详细程度
loggingInterceptor.setColorLevel(Level.INFO); //log颜色级别决定了log在控制台显示的颜色
builder.addInterceptor(loggingInterceptor); //添加OkGo默认debug日志
//第三方的开源库使用通知显示当前请求的log不过在做文件下载的时候这个库好像有问题对文件判断不准确
//builder.addInterceptor(new ChuckInterceptor(this));
//超时时间设置默认60秒
builder.readTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS); //全局的读取超时时间
builder.writeTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS); //全局的写入超时时间
builder.connectTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS); //全局的连接超时时间
//自动管理cookie或者叫session的保持以下几种任选其一就行
//builder.cookieJar(new CookieJarImpl(new SPCookieStore(this))); //使用sp保持cookie如果cookie不过期则一直有效
builder.cookieJar(new CookieJarImpl(new DBCookieStore(this))); //使用数据库保持cookie如果cookie不过期则一直有效
//builder.cookieJar(new CookieJarImpl(new MemoryCookieStore())); //使用内存保持cookieapp退出后cookie消失
//https相关设置以下几种方案根据需要自己设置
//方法一:信任所有证书,不安全有风险
HttpsUtils.SSLParams sslParams1 = HttpsUtils.getSslSocketFactory();
//方法二:自定义信任规则,校验服务端证书
HttpsUtils.SSLParams sslParams2 = HttpsUtils.getSslSocketFactory(new SafeTrustManager());
//方法三:使用预埋证书,校验服务端证书(自签名证书)
//HttpsUtils.SSLParams sslParams3 = HttpsUtils.getSslSocketFactory(getAssets().open("srca.cer"));
//方法四使用bks证书和密码管理客户端证书双向认证使用预埋证书校验服务端证书自签名证书
//HttpsUtils.SSLParams sslParams4 = HttpsUtils.getSslSocketFactory(getAssets().open("xxx.bks"), "123456", getAssets().open("yyy.cer"));
builder.sslSocketFactory(sslParams1.sSLSocketFactory, sslParams1.trustManager);
//配置https的域名匹配规则详细看demo的初始化介绍不需要就不要加入使用不当会导致https握手失败
builder.hostnameVerifier(new SafeHostnameVerifier());
// 其他统一的配置
// 详细说明看GitHub文档https://github.com/jeasonlzy/
OkGo.getInstance().init(this) //必须调用初始化
.setOkHttpClient(builder.build()) //建议设置OkHttpClient不设置会使用默认的
.setCacheMode(CacheMode.NO_CACHE) //全局统一缓存模式,默认不使用缓存,可以不传
.setCacheTime(CacheEntity.CACHE_NEVER_EXPIRE) //全局统一缓存时间,默认永不过期,可以不传
.setRetryCount(3); //全局统一超时重连次数默认为三次那么最差的情况会请求4次(一次原始请求,三次重连请求)不需要可以设置为0
// .addCommonHeaders(headers) //全局公共头
// .addCommonParams(params); //全局公共参数
}
/**
* 这里只是我谁便写的认证规则具体每个业务是否需要验证以及验证规则是什么请与服务端或者leader确定
* 这里只是我谁便写的认证规则具体每个业务是否需要验证以及验证规则是什么请与服务端或者leader确定
* 这里只是我谁便写的认证规则具体每个业务是否需要验证以及验证规则是什么请与服务端或者leader确定
* 重要的事情说三遍,以下代码不要直接使用
*/
private class SafeTrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
try {
for (X509Certificate certificate : chain) {
certificate.checkValidity(); //检查证书是否过期,签名是否通过等
}
} catch (Exception e) {
throw new CertificateException(e);
}
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}
/**
* 这里只是我谁便写的认证规则具体每个业务是否需要验证以及验证规则是什么请与服务端或者leader确定
* 这里只是我谁便写的认证规则具体每个业务是否需要验证以及验证规则是什么请与服务端或者leader确定
* 这里只是我谁便写的认证规则具体每个业务是否需要验证以及验证规则是什么请与服务端或者leader确定
* 重要的事情说三遍,以下代码不要直接使用
*/
private class SafeHostnameVerifier implements HostnameVerifier {
@Override
public boolean verify(String hostname, SSLSession session) {
//验证主机名是否匹配
//return hostname.equals("server.jeasonlzy.com");
return true;
}
}
}