GoldenLineApplication.java 6.93 KB
package com.cnlive.goldenline.application;

import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.annotation.NonNull;
import android.support.multidex.MultiDex;
import android.util.Log;

import com.cnlive.goldenline.BuildConfig;
import com.cnlive.goldenline.ui.activity.SplashActivity;
import com.cnlive.goldenline.util.ChannelUtil;
import com.cnlive.goldenline.util.DeviceUtils;
import com.cnlive.goldenline.util.LogUtils;
import com.cnlive.goldenline.util.NetWorkStateReceiver;
import com.cnlive.goldenline.util.PushHelper;
import com.cnlive.goldenline.util.SPUtils;
import com.cnlive.libs.util.Config;
import com.crashlytics.android.Crashlytics;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.imagepipeline.backends.okhttp.OkHttpImagePipelineConfigFactory;
import com.facebook.imagepipeline.core.ImagePipelineConfig;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.squareup.okhttp.OkHttpClient;
import com.umeng.analytics.AnalyticsConfig;
import com.umeng.message.IUmengRegisterCallback;
import com.umeng.message.PushAgent;
import com.umeng.message.UmengNotificationClickHandler;
import com.umeng.message.entity.UMessage;

import java.util.List;

import cn.cmvideo.sdk.common.CmVideoApplication;
import io.fabric.sdk.android.Fabric;

/**
 *
 * Created by zuoxian on 15/9/7.
 */
public class GoldenLineApplication extends CmVideoApplication  {

    public static GoldenLineApplication sInstance;
    public   NetWorkStateReceiver netWorkStateReceiver;
    public static String ime = "";
    public static SharedPreferences.Editor mEdit;

    /*正式*/
    @NonNull
    public static String appSecret = "c3af3f51d150a487520367b9974de5d3bc289ce9c698f7";

    @Override
    public void onCreate() {
        super.onCreate();
        Fabric.with(this, new Crashlytics());

        System.loadLibrary("mg20pbase");
        String channel = ChannelUtil.getChannelFromApk(this);
        AnalyticsConfig.setChannel(channel);
        if (null == mEdit) {
            SharedPreferences share = getSharedPreferences("myUid", MODE_PRIVATE);
            mEdit = share.edit(); //编辑文件
        }

        // initialize the singleton1
        sInstance = this;
        // initialize fresco
        ImagePipelineConfig config = OkHttpImagePipelineConfigFactory.newBuilder(this,
                new OkHttpClient())
                .setDownsampleEnabled(true)
                .build();
        Fresco.initialize(this, config);

        ime = DeviceUtils.getIEMI(this);
//        MiguUtils.getMobilePhoneNumber(this);

        //测试  com.cnlive.goldenline.dev
//        Config.init(this, "117_j0sxdaij25", "d4d2e60cd62e452cabbc2af40381be0759b02f09f478c1");
        //正式  com.cnlive.goldenline


        Config.init(this, "117_itdq3xbv08", "d59862943c394abeb6cac94106f92332546827297104c3");

        if (!BuildConfig.LOG_DEBUG)
            CrashHandler.getInstance().init(getApplicationContext());


        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
                .threadPoolSize(5)//多线程下载中的最大线程数
                .diskCacheFileNameGenerator(new Md5FileNameGenerator()) //设置本地文件名缓存规则
                .diskCacheSize(10 * 1024 * 1024)//本地缓存的可以放置最大数,这里设置的是50M
                .diskCacheFileCount(110) //最大放置多少张图片
                .build();

        //将单利模式加载进去,这样全局就只有一个这样的对象
        ImageLoader.getInstance().init(configuration);
        initUMeng();


    }


    /**
     * register UMeng service
     */
    private void initUMeng() {

        PushAgent mPushAgent = PushAgent.getInstance(this);
        //注册推送服务,每次调用register方法都会回调该接口

        mPushAgent.register(new IUmengRegisterCallback() {

            @Override
            public void onSuccess(String deviceToken) {
                //注册成功会返回device token
                Log.d("umToken", "device token: " + deviceToken);
                SPUtils.put(getApplicationContext(),"device_token",deviceToken);
            }

            @Override
            public void onFailure(String s, String s1) {
                LogUtils.LOGE("um init failure");
            }
        });


        UmengNotificationClickHandler notificationClickHandler = new UmengNotificationClickHandler() {
            @Override
            public void dealWithCustomAction(Context context, UMessage msg) {

                String type = msg.extra.get("pushTypeCode");
                String jsonStr = msg.extra.get("pushModel");

                if(type ==null){
                    return;
                }

                Log.e("testPush", "dealWithCustomAction: "+jsonStr);

                if (isAppInBackground(context)) {
                    //app's mainActivity has been destroyed but the process alive in system.

                    if ((boolean) SPUtils.get(context, "isExit", false)) {
                        SplashActivity.start(context,type,jsonStr);
                    } else {
                        //app go background when user home press.
                        Intent intent = PushHelper.getIntent(context, type,jsonStr);
                        if(intent !=null){
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            context.startActivity(intent);
                        }
                    }
                } else { //app is showing to user.

                    Log.e("test", "dealWithCustomAction: ");
                    Intent intent = PushHelper.getIntent(context, type,jsonStr);
                    if(intent !=null){
                        Log.e("test", "dealWithCustomAction: 1");
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        context.startActivity(intent);
                    }
                }

            }
        };
        mPushAgent.setNotificationClickHandler(notificationClickHandler);

    }



    public static synchronized GoldenLineApplication getInstance() {
        return sInstance;
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(base);
    }



    /**
     * judge app is running on background
     * @param context context
     * @return true: background ,false: font
     */
    private boolean isAppInBackground(Context context) {
        ActivityManager activityManager =
                (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

        List<ActivityManager.RunningAppProcessInfo> processInfos = activityManager.getRunningAppProcesses();

        return !processInfos.get(0).processName.equals(context.getPackageName());
    }


}