package com.electric.chargingpile.application; import android.annotation.SuppressLint; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.graphics.Bitmap; import android.os.Build; import android.os.StrictMode; import android.text.TextUtils; import android.util.Log; import androidx.multidex.MultiDexApplication; import com.alibaba.fastjson.JSONException; import com.amap.api.location.AMapLocationClient; import com.amap.api.maps.model.LatLng; import com.blankj.utilcode.util.LogUtils; import com.blankj.utilcode.util.Utils; import com.electric.chargingpile.BuildConfig; import com.electric.chargingpile.activity.MainMapActivity; import com.electric.chargingpile.data.AdDetail; import com.electric.chargingpile.data.Adin; import com.electric.chargingpile.data.CarOwnerCertificateBean; import com.electric.chargingpile.data.Zhan; import com.electric.chargingpile.entity.CarSeriesEntity; import com.electric.chargingpile.gen.DaoMaster; import com.electric.chargingpile.gen.DaoSession; import com.electric.chargingpile.manager.ProfileManager; import com.electric.chargingpile.util.DES3; import com.electric.chargingpile.util.JsonUtils; import com.electric.chargingpile.util.PhotoUtils; import com.electric.chargingpile.util.SharedPreferencesHelper; import com.google.gson.Gson; import com.mob.MobSDK; import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.assist.ImageScaleType; import com.shuyu.gsyvideoplayer.GSYVideoManager; import com.shuyu.gsyvideoplayer.model.VideoOptionModel; import com.tencent.bugly.crashreport.CrashReport; import com.zhy.http.okhttp.OkHttpUtils; import com.zhy.http.okhttp.callback.StringCallback; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import cn.jpush.android.api.JPushInterface; import okhttp3.Call; import tv.danmaku.ijk.media.player.IjkMediaPlayer; public class MainApplication extends MultiDexApplication { public static MainApplication instances; private DaoMaster.DevOpenHelper mHelper; private SQLiteDatabase db; private DaoMaster mDaoMaster; private DaoSession mDaoSession; public static int mScreenWidth; public static int mScreenHeight; public static SharedPreferencesHelper sph; public static List collectList; public static String userPhone = ""; public static String userTpye = ""; // 1:国标 2:特斯拉 public static String userId = ""; public static String userCar = ""; public static String userIcon = ""; public static String userCertifiedModel=""; //用户认证车型 此处仅为一个作为一个标识,如果有,则表示已认证过 public static String userCarIntentMode=""; //用户意向车型 public static LatLng center = null; // 用户位置 public static String userNickname = ""; public static String mapStatus = ""; public static String costWay = ""; public static String sudu = ""; // 1: 快充 2:慢充 public static String shuxing = ""; // 公共、私人 public static String messageToken = ""; public static String map = ""; public static String atCity = ""; public static String sql = ""; public static String uptime = ""; public static String details_flag = "0"; public static String firstPoint = ""; public static Boolean firstSsyd; public static String password = ""; public static String url = "http://59.110.68.162";// 充电桩测试环境 public static String pic_url = "http://59.110.68.162/zhannew/uploadfile/"; // public static String url = "http://cdz.evcharge.cc";// 充电桩正式环境 // public static String pic_url = "http://cdz.evcharge.cc/zhannew/uploadfile/"; public static String urlNew = "http://123.56.67.7:83/api/0300";// 一电测试环境 public static String d1evUrl = "https://d1ev-new.yiduyongche.com";// 评论上传视频 public static String CDN = "https://cdn-fs.d1ev.com"; // public static String urlNew = "https://api.touchev.com:83/api/0300";// 一电正式环境 // public static String url = "https://cdz.d1ev.com"; public static String build_flag = "0"; public static String support = "0"; // true:本APP支付 false:其他方式支付 public static String freestop = ""; // true:免费停车 public static String selecthotel = ""; // true:酒店 public static String selectexpressway = ""; // true:高速 public static String selectjingdian = ""; // true:景点 public static String logid = ""; public static String suitcar = ""; public static Boolean gestureguide; public static String h5_url = ""; private String pushID = ""; public static String imei = ""; public static String current_url = ""; public static String goods_type = ""; public static String ad_link = ""; public static String ok = ""; public static String type = ""; public static String userPassword = ""; public static String mainSkip = ""; public static String level_one = ""; public static String level_two = ""; public static String level_three = ""; public static String level_four = ""; public static String level_five = ""; public static String huodonglabel = ""; public static String mianStop = ""; public static String search_address = ""; public static boolean isMap = true; public static int count; public static int carCount; public static int round; public static int msgOne; public static String msgTime; public static String firstOpenTime; public static int msgTwo; public static List list_addetail; public static String festival_time = ""; public static boolean isIgnore = true; public static Double search_jing = 0.0, search_wei = 0.0; public static Context context; public static String current_code = "3.5"; public static String storePath = ""; public static String q_content = ""; public static Map q_map = new HashMap<>(); public static boolean isAppStart; public static boolean haveActivity = false; public static String ad_major = ""; public static Adin mAdComment = null; private String mCurrentCity = ""; @SuppressLint("MissingPermission") @Override public void onCreate() { super.onCreate(); this.context = getApplicationContext(); storePath = PhotoUtils.CACHE_DIR; StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder(); StrictMode.setVmPolicy(builder.build()); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { builder.detectFileUriExposure(); } // PermissionMonitor.start(false); instances = this; setDatabase(); Utils.init(this); LogUtils.getConfig().setLogSwitch(true); initImageLoader(getApplicationContext()); try { OkHttpUtils.getInstance().setCertificates(getAssets().open("ca.crt")); OkHttpUtils.getInstance().setCertificates(); } catch (IOException e) { e.printStackTrace(); } mScreenWidth = getResources().getDisplayMetrics().widthPixels; mScreenHeight = getResources().getDisplayMetrics().heightPixels; Log.e("mScreenWidth", mScreenWidth + ""); Log.e("mScreenHeight", mScreenHeight + ""); sph = new SharedPreferencesHelper(this); collectList = new ArrayList<>(); isAppStart = ProfileManager.getInstance().getAppStart(getApplicationContext()); userPhone = ProfileManager.getInstance().getUsername(getApplicationContext()); userId = ProfileManager.getInstance().getUserid(getApplicationContext()); userPassword = ProfileManager.getInstance().getKeyUserpassword(getApplicationContext()); userCar = ProfileManager.getInstance().getUsercar(getApplicationContext()); userIcon = ProfileManager.getInstance().getUsericon(getApplicationContext()); Log.e("111", "onCreate: " + userIcon); msgOne = ProfileManager.getInstance().getMsgOne(getApplicationContext()); msgTime = ProfileManager.getInstance().getSystemMsgTime(getApplicationContext()); firstOpenTime = ProfileManager.getInstance().getFirstOpenTime(getApplicationContext()); userCarIntentMode = ProfileManager.getInstance().getCarIntentModel(getApplicationContext()); loginRemind(); setFestival(); if (ProfileManager.getInstance().getPrivacyAgreement(this)) { MainApplication.initSDK(); } //防止进度跳转不准确 VideoOptionModel videoOptionModel = new VideoOptionModel(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "enable-accurate-seek", 1); ArrayList list =new ArrayList(); list.add(videoOptionModel); GSYVideoManager.instance().setOptionModelList(list); } public void initJPush() { //极光 JPushInterface.setSmartPushEnable(this,true); JPushInterface.setDebugMode(BuildConfig.DEBUG); JPushInterface.init(this); Log.e("TAG", "initJPush: "+ JPushInterface.getRegistrationID(this) ); } public static MainApplication getInstance() { if (null == instances) { instances = new MainApplication(); } return instances; } public void setmCurrentCity(String mCurrentCity) { this.mCurrentCity = mCurrentCity; } public String getmCurrentCity() { return mCurrentCity; } public static void initImageLoader(Context context) { ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).threadPoolSize(5).threadPriority(Thread.NORM_PRIORITY - 2).denyCacheImageMultipleSizesInMemory() .discCacheFileNameGenerator(new Md5FileNameGenerator()).discCacheSize(50 * 1024 * 1024).memoryCacheSize(5 * 1024 * 1024).build(); ImageLoader.getInstance().init(config); } public static DisplayImageOptions getCacheOptions(int image) { return new DisplayImageOptions.Builder().showImageForEmptyUri(image).showImageOnFail(image).cacheInMemory(true).cacheOnDisc(true).considerExifParams(true) .imageScaleType(ImageScaleType.IN_SAMPLE_INT).resetViewBeforeLoading(false).bitmapConfig(Bitmap.Config.RGB_565).build(); } public static boolean isLogin() { if ("".equals(userPhone)) { return false; } return true; } private void loginRemind() { round = ProfileManager.getInstance().getRound(getApplicationContext()); count = ProfileManager.getInstance().getCount(getApplicationContext()); int maxCount = ProfileManager.getInstance().getMaxCount(getApplicationContext()); if (!MainApplication.isLogin()) { int i = count + 1; Log.e("i***-", i + ""); count = i; i = i >= maxCount ? 0: i; ProfileManager.getInstance().setCount(getApplicationContext(), i); }else{ ProfileManager.getInstance().setCount(getApplicationContext(), 0); ProfileManager.getInstance().setMaxCount(getApplicationContext(), 4); new Thread(()->{ try { String host = ""; if (MainApplication.url.contains("cdz.evcharge.cc")) { host = "cdz.evcharge.cc"; } else { host = "59.110.68.162"; } Socket socket = new Socket(host, 9503); // IP:10.14.114.127,端口54321 // 向服务器发送消息 PrintWriter out = new PrintWriter(new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())), true); out.println("{\"fun\":\"timer\"}"); // out.println("{\"fun\":\"getcity\"}"); // 接收来自服务器的消息 BufferedReader br = new BufferedReader(new InputStreamReader( socket.getInputStream())); String msg = br.readLine(); int time = (int) (System.currentTimeMillis() / 1000); MainMapActivity.cha = time - Integer.parseInt(msg); long tokenTime = System.currentTimeMillis() / 1000 - MainMapActivity.cha - 1; String token = null; try { token = DES3.encode(String.valueOf(tokenTime)); token = URLEncoder.encode(token, "UTF-8"); } catch (Exception e) { e.printStackTrace(); } String url = MainApplication.url + "/zhannew/basic/web/index.php/car/my?userid=" + MainApplication.userId + "&order=1" + "&token=" + token; Log.e("TAG -- hyc", "getCarOwnerCertificateList: "+url); OkHttpUtils.get().url(url).build().connTimeOut(6000).readTimeOut(6000).execute(new StringCallback() { @Override public void onError(Call call, Exception e) { } @Override public void onResponse(String response) { String rtnCode = JsonUtils.getKeyResult(response, "rtnCode"); Log.e("TAG_hyc", "onResponse: "+response ); if ("01".equals(rtnCode)) { String chexing = ""; String data = JsonUtils.getKeyResult(response, "data"); List list=new ArrayList<>(); try { list = JsonUtils.parseToObjectList(data, CarOwnerCertificateBean.class); }catch (JSONException e){ } boolean certificated = false; for (CarOwnerCertificateBean bean : list) { if (bean.getStatus()!=2){ //排除意向车型,则证明用户已经车主认证过了 chexing = bean.getChexing(); certificated = true; break; } } if (certificated) { Gson gson = new Gson(); CarSeriesEntity carSeriesEntity = gson.fromJson(chexing, CarSeriesEntity.class); userCertifiedModel= carSeriesEntity.getSeriesName(); } if (userCertifiedModel.equals("")){ int max = ProfileManager.getInstance().getMaxCarModelCount(getApplicationContext()); carCount=ProfileManager.getInstance().getCarModelCount(getApplicationContext()) + 1; int count =carCount >= max ? 0 :carCount; ProfileManager.getInstance().setCarModelCount(getApplicationContext(), count); }else{ ProfileManager.getInstance().setCarModelCount(getApplicationContext(),0); ProfileManager.getInstance().setMaxCarModelCount(getApplicationContext(), 4); } } } }); }catch (Exception e){ } }).start(); } } private void setFestival() { int time = (int) (System.currentTimeMillis() / 1000); if (time >= 1484841600 && time <= 1486569599) { MainApplication.festival_time = "1"; } else if (time >= 1486569600 && time <= 1486915199) { MainApplication.festival_time = "2"; } } /** * 设置greenDao */ private void setDatabase() { // 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。 // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO 已经帮你做了。 // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。 // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。 mHelper = new DaoMaster.DevOpenHelper(this, "my-search-text-db", null); db = mHelper.getWritableDatabase(); // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。 mDaoMaster = new DaoMaster(db); mDaoSession = mDaoMaster.newSession(); } public DaoSession getDaoSession() { return mDaoSession; } public SQLiteDatabase getDb() { return db; } public String getPushID() { if (TextUtils.isEmpty(pushID)) { return ProfileManager.getInstance().getPushID(getApplicationContext()); } else { return pushID; } } public void setPushID(String pushID) { this.pushID = pushID; ProfileManager.getInstance().setPushID(getApplicationContext(), pushID); } public static void initSDK() { AMapLocationClient.updatePrivacyShow(context,true,true); AMapLocationClient.updatePrivacyAgree(context,true); MobSDK.init(MainApplication.context); MobSDK.submitPolicyGrantResult(true,null); CrashReport.initCrashReport(MainApplication.context, "900010422", BuildConfig.DEBUG); CrashReport.setAppChannel(MainApplication.context, BuildConfig.FLAVOR); } }