Newer
Older
dxcgt / app / src / main / java / com / smartdot / cgt / util / ApplicationMain.java
wangxitong on 6 Apr 2021 7 KB first commit
package com.smartdot.cgt.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.Thread.UncaughtExceptionHandler;
import java.text.DecimalFormat;
import java.text.MessageFormat;
import java.text.NumberFormat;
import java.util.Date;
import java.util.Set;

import org.apache.http.util.EncodingUtils;

import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.os.IBinder;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.Toast;
import cn.jpush.android.api.JPushInterface;
import cn.jpush.android.api.TagAliasCallback;

import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.MKEvent;
import com.smartdot.cgt.BuildConfig;
import com.smartdot.cgt.activity.BaseActivity;
import com.smartdot.cgt.activity.FrmMain;
import com.smartdot.cgt.model.UserModel;
import com.smartdot.cgt.util.config.CgtConfig;
import com.smartdot.cgt.util.config.ConfigLoader;

public class ApplicationMain extends Application implements
		UncaughtExceptionHandler
{
	private static ApplicationMain instance;

	private CgtConfig cgtConfig;

	private UserModel userModel;
	// TODO 地图相关
	public boolean m_bKeyRight = true;
	public BMapManager mBMapManager = null;

	public CgtConfig getCgtConfig()
	{
		return cgtConfig;
	}

	public void setUserModel(UserModel userModel)
	{
		this.userModel = userModel;
	}

	public UserModel getUserModel()
	{
		return userModel;
	}

	public static ApplicationMain getInstance()
	{
		return instance;
	}

	@Override
	public void onCreate()
	{
		super.onCreate();
		//initEngineManager(this);
		instance = this;
		cgtConfig = new ConfigLoader().getConfig();
		Thread.setDefaultUncaughtExceptionHandler(this);
		// 极光推送相关
		JPushInterface.setDebugMode(BuildConfig.DEBUG); // 设置是否开启日志
        JPushInterface.init(this);// 初始化 JPush
		String userId="";
		if(ApplicationMain.getInstance()!=null&&ApplicationMain.getInstance().getUserModel()!=null&&ApplicationMain.getInstance().getUserModel().getBgAdminId()!=null)
		{
			userId=ApplicationMain.getInstance().getUserModel().getBgAdminId();
		}else{
			LoginVo vo=	PerformanceUtil.getUser(ApplicationMain.this);
			userId=vo.getBgadminid();
		}
		//设置别名Alia
		JPushInterface.setAlias(this, userId, new TagAliasCallback() {
			@Override
			public void gotResult(int i, String s, Set<String> set) {

			}
		});
	}

	@Override
	public void uncaughtException(Thread thread, Throwable ex)
	{
		Msg.showInfo(this, "程序意外终止退出");
		Log.e("CgtApplicationExit", "程序意外终止退出", ex);
		StringBuffer buffer = new StringBuffer();
		buffer.append("\r\n\r\n");
		buffer.append(new Date().toString());
		buffer.append("\r\n");
		buffer.append(ex.toString());
		buffer.append("\r\n");
		for (StackTraceElement traceElement : ex.getStackTrace())
		{
			buffer.append(traceElement.toString());
			buffer.append("\r\n");
		}
		File configFolder = new File(this.getCgtConfig().getSystemConfigPath());
		if (!configFolder.exists())
		{
			configFolder.mkdirs();
		}
		File errLog = new File(configFolder, "error.log");
		try
		{
			if (!errLog.exists())
			{
				errLog.createNewFile();
			}
			OutputStream os = new FileOutputStream(errLog, true);
			os.write(EncodingUtils.getBytes(buffer.toString(), "UTF-8"));
			os.flush();
			os.close();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}

		for (Activity activity : BaseActivity.activedActivity)
		{
			activity.finish();
		}
		// 结束进程
		android.os.Process.killProcess(android.os.Process.myPid());
	}

	public String getConfigPath(String fileName)
	{
		File cgtPath = new File(this.getCgtConfig().getSystemConfigPath());
		if (!cgtPath.exists())
		{
			cgtPath.mkdirs();
		}
		return MessageFormat.format("{0}{1}", this.getCgtConfig()
				.getSystemConfigPath(), fileName);
	}

	public File getConfigTempPath(String fileName)
	{
		String tmpPath = getConfigPath("temp");
		File tmpDir = new File(tmpPath);
		if (!tmpDir.exists())
		{
			tmpDir.mkdirs();
		}
		File tmpFile = new File(tmpPath, fileName);
		if (!tmpFile.exists())
		{
			try
			{
				tmpFile.createNewFile();
			}
			catch (IOException e)
			{
				e.printStackTrace();
			}
		}
		return tmpFile;
	}

	public String getAudioTempPath()
	{
		return getAudioTempFile().getAbsolutePath();
	}

	public File getAudioTempFile()
	{
		return getConfigTempPath("tmpAudio.wav");
	}

	public String getImageTempPath()
	{
		return getImageTempFile().getAbsolutePath();
	}

	public File getImageTempFile()
	{
		File tmpImage = getConfigTempPath("tmpImage.jpg");
		if (!tmpImage.exists())
		{
			try
			{
				tmpImage.createNewFile();
			}
			catch (IOException e)
			{
				e.printStackTrace();
			}
		}
		return tmpImage;
	}

	/**
	 * 获取指定资源ID的VIEW
	 * 
	 * @param resource
	 * @return
	 */
	public View inflateView(int resource)
	{
		return inflateView(resource, null);
	}

	public View inflateView(int resource, ViewGroup root)
	{
		LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		return vi.inflate(resource, root);
	}

	public String setDotPosition(double from, int position)
	{
		DecimalFormat format = (DecimalFormat) NumberFormat.getInstance();
		StringBuilder sb = new StringBuilder("0.");
		while (position > 0)
		{
			sb.append("0");
			position--;
		}
		format.applyPattern(sb.toString());
		return format.format(from);
	}

	public String getTwoNumber(int from)
	{
		DecimalFormat format = (DecimalFormat) NumberFormat.getInstance();
		format.applyPattern("00");
		return format.format(from);
	}

	public void hideSoftInputFromWindow(IBinder windowToken)
	{
		InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
		inputMethodManager.hideSoftInputFromWindow(windowToken, 0);
	}

	// TODO 地图相关
	public void initEngineManager(Context context)
	{
		if (mBMapManager == null)
		{
			mBMapManager = new BMapManager(context);
		}

		if (!mBMapManager.init(new MyGeneralListener()))
		{
			Toast.makeText(
					ApplicationMain.getInstance().getApplicationContext(),
					"BMapManager  初始化错误!", Toast.LENGTH_LONG).show();
		}
	}

	// 常用事件监听,用来处理通常的网络错误,授权验证错误等
	public static class MyGeneralListener implements MKGeneralListener
	{

		@Override
		public void onGetNetworkState(int iError)
		{
			if (iError == MKEvent.ERROR_NETWORK_CONNECT)
			{
				Toast.makeText(
						ApplicationMain.getInstance().getApplicationContext(),
						"您的网络出错啦!", Toast.LENGTH_LONG).show();
			}
			else if (iError == MKEvent.ERROR_NETWORK_DATA)
			{
				Toast.makeText(
						ApplicationMain.getInstance().getApplicationContext(),
						"输入正确的检索条件!", Toast.LENGTH_LONG).show();
			}
			// ...
		}

		@Override
		public void onGetPermissionState(int iError)
		{
			// 非零值表示key验证未通过
			if (iError != 0)
			{
				// 授权Key错误:
//				Toast.makeText(
//						ApplicationMain.getInstance().getApplicationContext(),
//						"请在 DemoApplication.java文件输入正确的授权Key,并检查您的网络连接是否正常!error: "
//								+ iError, Toast.LENGTH_LONG).show();
				ApplicationMain.getInstance().m_bKeyRight = false;
			}
			else
			{
				ApplicationMain.getInstance().m_bKeyRight = true;
				Toast.makeText(
						ApplicationMain.getInstance().getApplicationContext(),
						"key认证成功", Toast.LENGTH_LONG).show();
			}
		}
	}

}