InitializeService.java 5.33 KB
package com.chudiangameplay.android.service;

import android.app.IntentService;
import android.app.Notification;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.StrictMode;

import com.chudiangameplay.android.CrashHandler;
import com.chudiangameplay.android.MyApplication;
import com.chudiangameplay.android.constant.SPConstants;
import com.chudiangameplay.android.manager.Config;
import com.chudiangameplay.android.tool.SPUtil;
import com.chudiangameplay.android.ui.view.imagepicker.CropImageView;
import com.chudiangameplay.android.ui.view.imagepicker.GlideImageLoader;
import com.chudiangameplay.android.ui.view.imagepicker.ImagePicker;
import com.chudiangameplay.android.util.Util;
import com.hyphenate.chat.EMClient;
import com.hyphenate.chat.EMOptions;
import com.tencent.bugly.crashreport.CrashReport;
import com.umeng.commonsdk.UMConfigure;


/**
 * Created by zt on 2018/8/13.
 * APP启动初始化操作,移动系统后台服务运行, 优化APP启动速度
 */
public class InitializeService extends IntentService {
    private static final String ACTION_INIT_WHEN_APP_CREATE = "com.anly.githubapp.service.action.INIT";

    public InitializeService() {
        super("InitializeService");
    }

    @Override
    public void onCreate() {
        super.onCreate();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            startForeground(1, new Notification());
        }
    }

    public static void start(Context context) {
        Intent intent = new Intent(context, InitializeService.class);
        intent.setAction(ACTION_INIT_WHEN_APP_CREATE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            context.startForegroundService(intent);
        } else {
            context.startService(intent);
        }
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        if (intent != null) {
            final String action = intent.getAction();
            if (ACTION_INIT_WHEN_APP_CREATE.equals(action)) {
                performInit();
            }
        }
    }

    //初始化操作
    private void performInit() {
        //严苛模式
        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();
        }

        //程序异常捕获类
//        CrashHandler crashHandler = CrashHandler.getInstance();
//        crashHandler.init(getApplicationContext()); //与bugly冲突,会导致bug不上报
        //初始化友盟
        if (Config.curVersion == Config.RELEASE) {
//            UMConfigure.init(getApplicationContext(), "5c00c549f1f5566d2d00019a", "10000", UMConfigure.DEVICE_TYPE_PHONE, null);
            UMConfigure.init(getApplicationContext(), null, null, UMConfigure.DEVICE_TYPE_PHONE, null);
        }

        //记录启动次数
        int times = SPUtil.getIntValue(getApplicationContext(), SPConstants.LaunchTIMES, 0);
        times++;
        SPUtil.putValue(getApplicationContext(), SPConstants.LaunchTIMES, times);

        //初始化IM
//        initIM();
        //初始化ImagePiker
        initImagpiker();

        //初始化Bugly
        CrashReport.initCrashReport(getApplicationContext());
    }

    private void initIM() {
        EMOptions options = new EMOptions();
        // 默认添加好友时,是不需要验证的,改成需要验证
        options.setAcceptInvitationAlways(false);
        // 是否自动将消息附件上传到环信服务器,默认为True是使用环信服务器上传下载,如果设为 false,需要开发者自己处理附件消息的上传和下载
        options.setAutoTransferMessageAttachments(true);
        // 是否自动下载附件类消息的缩略图等,默认为 true 这里和上边这个参数相关联
        options.setAutoDownloadThumbnail(true);
        //初始化
        EMClient.getInstance().init(getApplicationContext(), options);
        //在做打包混淆时,关闭debug模式,避免消耗不必要的资源
        EMClient.getInstance().setDebugMode(false);
    }

    private void initImagpiker() {
        ImagePicker imagePicker = ImagePicker.getInstance();
        imagePicker.setImageLoader(new GlideImageLoader());   //设置图片加载器
        imagePicker.setShowCamera(true);                      //显示拍照按钮
        imagePicker.setCrop(false);                           //允许裁剪(单选才有效)
        imagePicker.setSaveRectangle(true);                   //是否按矩形区域保存
        imagePicker.setSelectLimit(9);              //选中数量限制
        imagePicker.setStyle(CropImageView.Style.RECTANGLE);  //裁剪框的形状
        imagePicker.setFocusWidth(getResources().getDisplayMetrics().widthPixels);                       //裁剪框的宽度。单位像素(圆形自动取宽高最小值)
        imagePicker.setFocusHeight(Util.dip2px(getApplicationContext(), 280));                      //裁剪框的高度。单位像素(圆形自动取宽高最小值)
        imagePicker.setOutPutX(getResources().getDisplayMetrics().widthPixels);                         //保存文件的宽度。单位像素
        imagePicker.setOutPutY(Util.dip2px(getApplicationContext(), 280));    //保存文件的高度。单位像素
    }
}