MainApplication.java 6.81 KB
package com.metroapp;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.support.multidex.MultiDex;
import android.support.multidex.MultiDexApplication;
import android.util.Log;

import com.BV.LinearGradient.LinearGradientPackage;
import com.beefe.picker.PickerViewPackage;
import com.brentvatne.react.ReactVideoPackage;
import com.douwan.peacemetro.BuildConfig;
import com.elvishew.xlog.LogConfiguration;
import com.elvishew.xlog.XLog;
import com.elvishew.xlog.printer.Printer;
import com.elvishew.xlog.printer.file.FilePrinter;
import com.elvishew.xlog.printer.file.backup.NeverBackupStrategy;
import com.elvishew.xlog.printer.file.naming.DateFileNameGenerator;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.bridge.WritableNativeMap;
import com.facebook.react.shell.MainReactPackage;
import com.facebook.soloader.SoLoader;
import com.imagepicker.ImagePickerPackage;
import com.iou90.autoheightwebview.AutoHeightWebViewPackage;
import com.lwansbrough.RCTCamera.RCTCameraPackage;
import com.mehcode.reactnative.splashscreen.SplashScreenPackage;
import com.metroapp.nativemodules.BluetoothModule;
import com.metroapp.rnpackage.BluetoothPackage;
import com.metroapp.rnpackage.UpdateVersionPackage;
import com.umeng.analytics.MobclickAgent;
import com.umeng.commonsdk.UMConfigure;
import com.umeng.message.IUmengRegisterCallback;
import com.umeng.message.PushAgent;
import com.umeng.message.UmengNotificationClickHandler;
import com.umeng.message.entity.UMessage;

import java.util.Arrays;
import java.util.List;

public class MainApplication extends MultiDexApplication implements ReactApplication {

  public static  MainApplication _this;
  private static final String TAG = "MainApplication";

  private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
    @Override
    public boolean getUseDeveloperSupport() {
      return BuildConfig.DEBUG;
    }

    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
              new MainReactPackage(),
              new AutoHeightWebViewPackage(),
              new RCTCameraPackage(),
              new ImagePickerPackage(),
              new LinearGradientPackage(),
              new PickerViewPackage(),
              new ReactVideoPackage(),
              new SplashScreenPackage(),
              new BluetoothPackage(),
              new UpdateVersionPackage()
      );
    }

    @Override
    protected String getJSMainModuleName() {
      return "index.android";
    }
  };

  @Override
  public ReactNativeHost getReactNativeHost() {
    return mReactNativeHost;
  }

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

  }

  private Context context;
  @Override
  public void onCreate() {
    super.onCreate();
    _this = this;
    SoLoader.init(this, false);
    context = this;
    //启动保活service
    Intent intent = new Intent(this, GrayService.class);
    startService(intent);
    initXLog();
    initUM();
//    registerLifeCallback();


  }

  /**
   * 管理activity生命周期,用于友盟检测日活
   */
  private  void  registerLifeCallback(){
    registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
      @Override
      public void onActivityCreated(Activity activity, Bundle bundle) {

      }

      @Override
      public void onActivityStarted(Activity activity) {

      }

      @Override
      public void onActivityResumed(Activity activity) {
        MobclickAgent.onResume(context);

      }

      @Override
      public void onActivityPaused(Activity activity) {
        MobclickAgent.onPause(context);

      }

      @Override
      public void onActivityStopped(Activity activity) {
      }

      @Override
      public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {

      }

      @Override
      public void onActivityDestroyed(Activity activity) {
      }
    });
  }

  /**
   *初始化 xlog
   */
  private  void initXLog(){

    LogConfiguration config = new LogConfiguration.Builder()
            // 指定 TAG,默认为 "X-LOG"
            .tag("METRO")
            .build();
    // 打印日志到文件的打印器
    Printer filePrinter = new FilePrinter
            // 指定保存日志文件的路径
            .Builder(Environment.getExternalStorageDirectory()+ "/1111MetroLog")
            // 指定日志文件名生成器,默认为 ChangelessFileNameGenerator("log")
            .fileNameGenerator(new DateFileNameGenerator())
            // 指定日志文件备份策略,默认为 FileSizeBackupStrategy(1024 * 1024)
            .backupStrategy(new NeverBackupStrategy())
            .build();
    XLog.init(config,filePrinter);
  }

  /**
   * 初始化友盟
   */
  private void initUM(){
    // 参数一:当前上下文context;
    // 参数二:应用申请的Appkey(需替换);
    // 参数三:渠道名称;
    // 参数四:设备类型,必须参数,传参数为UMConfigure.DEVICE_TYPE_PHONE则表示手机;传参数为UMConfigure.DEVICE_TYPE_BOX则表示盒子;默认为手机;
    // 参数五:Push推送业务的secret 填充Umeng Message Secret对应信息(需替换)
    UMConfigure.init(this,"5af105818f4a9d1579000170","metro",UMConfigure.DEVICE_TYPE_PHONE, "03c9cb56c684b9e749b77b1c0de8ccf0");
//    UMConfigure.init(this, UMConfigure.DEVICE_TYPE_PHONE, "03c9cb56c684b9e749b77b1c0de8ccf0");
    //友盟推送
    //获取消息推送代理示例
    PushAgent mPushAgent = PushAgent.getInstance(this);
    mPushAgent.setResourcePackageName(BuildConfig.APPLICATION_ID);
    //设置通知栏打开动作
    UmengNotificationClickHandler notificationClickHandler = new UmengNotificationClickHandler() {
      @Override
      public void launchApp(Context context, UMessage uMessage) {
        super.launchApp(context, uMessage);
        WritableMap et = new WritableNativeMap();
        BluetoothModule.sendEvent("MessageData",et);
      }

      @Override
      public void dealWithCustomAction(Context context, UMessage msg) {
      }
    };
    mPushAgent.setNotificationClickHandler(notificationClickHandler);
    //注册推送服务,每次调用register方法都会回调该接口
    mPushAgent.register(new IUmengRegisterCallback() {
      @Override
      public void onSuccess(String deviceToken) {
        //注册成功会返回deviceToken deviceToken是推送消息的唯一标志
        Log.i(TAG,"注册成功:deviceToken:-------->  " + deviceToken);
      }
      @Override
      public void onFailure(String s, String s1) {
        Log.e(TAG,"注册失败:-------->  " + "s:" + s + ",s1:" + s1);
      }
    });
  }
}