package com.ectrip.cyt.config; import java.io.File; import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.security.InvalidParameterException; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.Application; import android.app.Dialog; import android.bluetooth.BluetoothSocket; import android.content.ComponentName; import android.content.Context; import android.content.ContextWrapper; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Configuration; import android.content.res.Resources.NotFoundException; import android.database.sqlite.SQLiteDatabase; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Build; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.telephony.TelephonyManager; import android.text.InputType; import android.text.TextUtils; import android.util.DisplayMetrics; import android.view.Display; import android.view.WindowManager; import android.widget.EditText; import android_serialport_api.SerialPort; import android_serialport_api.SerialPortFinderHandset; import android_serialport_api.SerialPortHandset; import android_serialport_api.SerialPortNewHandset; import android_serialport_pos_id_api.SerialIdCardPort; import com.basewin.base.application.BaseApplication; import com.basewin.commu.exception.InitException; import com.basewin.commu.tools.XMLmanager; import com.basewin.database.DataBaseManager; import com.basewin.define.CurrTranParam; import com.basewin.define.FieldInfo; import com.basewin.define.TermParam; import com.basewin.define.TranParam; import com.basewin.exception.CrashHandler; import com.basewin.services.ServiceManager; import com.basewin.utils.AppUtil; import com.basewin.utils.GlobalTransData; import com.basewin.widgets.ViewSet; import com.ectrip.cyt.bean.ConfigBean; import com.ectrip.cyt.constant.LogoType; import com.ectrip.cyt.constant.constant; import com.ectrip.cyt.db.DbHelper; import com.ectrip.cyt.db.DbManager; import com.ectrip.cyt.exceptionsave.debug.SystemCrashLog; import com.ectrip.cyt.response.DetectVersionResponse; import com.ectrip.cyt.utils.AESEncryptor; import com.ectrip.cyt.utils.LogUtil; import com.ectrip.cyt.utils.SharedPreferences2Obj; import com.hdx.lib.printer.SerialPrinter; import com.hdx.lib.serial.SerialParam; import com.hdx.lib.serial.SerialPortOperaion; import com.hdx.lib.serial.SerialPortOperaion.SerialReadData; public class MyApp extends BaseApplication { private static final String TAG = "MyApp"; private static MyApp instance; // 是否是手持机 public boolean isHandset = false; public String KeyStr = "1234"; private String idCard = ""; // 身份证号 // 记录全部的activity private List activitys = null; public Object lock; private DetectVersionResponse updateBean; /*************************** 下面是2.0的变量声明 *******************************************/ private String ver = "";// 版本号 private String verType = ""; // 版本号 畅游通CT 备份QT private String signkey = ""; // 标识 private String identity = ""; // 编码 private int printNum = -1;// 打印次数 private boolean isBluConnection = false;// 是否连接蓝牙打印机中 private BluetoothSocket bluetoothSocket;// 蓝牙socket private Integer type = null;// 设备类型 private String ServiceIp = "";// w.ljw.com private int checkType = -1;//检票方式 0:二维码 private HashMap pid = null; //订单流水号 public void setPid(HashMap pid) { this.pid = pid; } public HashMap getPid() { return pid; } private Long accountId; //操作员ID private String username; public void setUsername(String username) { this.username = username; } public String getUsername() { return username; } public Long getAccountId() { return accountId; } public void setAccountId(Long accountId) { this.accountId = accountId; } @Override public void onCreate() { super.onCreate(); instance = this; SystemCrashLog.init(this); lock = new Object(); setVer();// 获取版本号 setVerType();// 获取版本类型 activitys = new LinkedList(); isHandset = DevicTool.getInstance().isSerialPortHandset(); if (android.os.Build.MODEL.equals("P2000L")){ ServiceManager.getInstence().init(this.getApplicationContext()); } } public static MyApp getInstance() { return instance; } public void setVer() { // 获取版本号,当获取第一次失败情况下,再获取一遍 PackageInfo info; try { info = instance.getPackageManager().getPackageInfo( instance.getPackageName(), 0); ver = info.versionName; } catch (NameNotFoundException e) { try { info = instance.getPackageManager().getPackageInfo( instance.getPackageName(), 0); ver = info.versionName; } catch (NameNotFoundException e1) { ver = "1.0"; e1.printStackTrace(); } e.printStackTrace(); } } public String getVer() { if (ver.equals("")) { PackageInfo info; try { info = instance.getPackageManager().getPackageInfo( instance.getPackageName(), 0); ver = info.versionName; } catch (NameNotFoundException e) { try { info = instance.getPackageManager().getPackageInfo( instance.getPackageName(), 0); ver = info.versionName; } catch (NameNotFoundException e1) { ver = "1.0"; e1.printStackTrace(); } e.printStackTrace(); } } return ver; } public int getCheckType() { return checkType; } public void setCheckType(int checkType) { this.checkType = checkType; } public void setVerType() { // 版本类型 畅游通:CT 备用: QT if (constant.logoMark == LogoType.CYT.getValue()||constant.logoMark == LogoType.EMC.getValue()) { verType = "CT"; } else if (constant.logoMark == LogoType.QNE.getValue()) { // 目前QT就是去哪儿 verType = "QT"; } } public String getVerType() { if (verType.equals("")) { if (constant.logoMark == LogoType.CYT.getValue()||constant.logoMark == LogoType.EMC.getValue()) { verType = "CT"; } else if (constant.logoMark == LogoType.QNE.getValue()) { // 目前QT就是去哪儿 verType = "QT"; } } return verType; } public String getSignkey() { if (signkey == null) { ArrayList listConfig; listConfig = DbManager.GetConfigs(); if (listConfig != null && listConfig.size() > 0) { try { signkey = AESEncryptor.decrypt("41227677", listConfig .get(0).getEc_signkey()); } catch (Exception e) { e.printStackTrace(); } } } return signkey; } public void setSignkey(String signkey) { this.signkey = signkey; } public String getIdentity() { if (identity == null) { try { ArrayList listConfig; listConfig = DbManager.GetConfigs(); if (listConfig != null && listConfig.size() > 0) { identity = listConfig.get(0).getEc_identity(); } } catch (Exception e) { e.printStackTrace(); } } return identity; } public void setIdentity(String identity) { this.identity = identity; } public int getPrintNum() { try { printNum = SharedPreferences2Obj.getInstance(this) .setName("MachineType") .getObject("printNum", Integer.class); if (printNum > 3) { printNum = 3; SharedPreferences2Obj.getInstance(this).setName("MachineType") .setObject("printNum", printNum); } } catch (Exception e) { e.printStackTrace(); } if (printNum == -1) { printNum = 2; } return printNum; } public void setPrintNum(int printNum) { this.printNum = printNum; } public boolean isBluConnection() { return isBluConnection; } public void setBluConnection(boolean isBluConnection) { this.isBluConnection = isBluConnection; } public BluetoothSocket getBluetoothSocket() { return bluetoothSocket; } public void setBluetoothSocket(BluetoothSocket bluetoothSocket) { this.bluetoothSocket = bluetoothSocket; } /** 检测网络连接状态 */ public boolean checkNetwork() { ConnectivityManager connectivity = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity != null) { NetworkInfo[] info = connectivity.getAllNetworkInfo(); if (info != null) for (int i = 0; i < info.length; i++) { if (info[i].getState() == NetworkInfo.State.CONNECTED) return true; } } return false; } public SharedPreferences savePreToSDcard(String name) { try { Field field; // 获取ContextWrapper对象中的mBase变量。该变量保存了ContextImpl对象 field = ContextWrapper.class.getDeclaredField("mBase"); field.setAccessible(true); // 获取mBase变量 Object obj = field.get(this); // 获取ContextImpl。mPreferencesDir变量,该变量保存了数据文件的保存路径 field = obj.getClass().getDeclaredField("mPreferencesDir"); field.setAccessible(true); // 创建自定义路径 File file = null; String storageState1 = Environment.getExternalStorageState(); if (storageState1.equals(Environment.MEDIA_MOUNTED)) { String savePath = Environment.getExternalStorageDirectory() .getAbsolutePath() + "/ectriptrippos"; file = new File(savePath); savePath += "/config"; File file2 = new File(savePath); if (!file.exists()) {// 判断文件夹目录是否存在 if (file.mkdir()) {// 如果不存在则创建 if (!file2.exists()) { if (file2.mkdir()) { field.set(obj, file2);// 修改mPreferencesDir变量的值 } } else { field.set(obj, file2);// 修改mPreferencesDir变量的值 } } } else { if (!file2.exists()) { if (file2.mkdir()) { field.set(obj, file2);// 修改mPreferencesDir变量的值 } } else { field.set(obj, file2);// 修改mPreferencesDir变量的值 } } } } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } int __sdkLevel = Build.VERSION.SDK_INT; try { return getSharedPreferences(name, (__sdkLevel > Build.VERSION_CODES.FROYO) ? 4 : 0); } catch (Exception e) { e.printStackTrace(); return getSharedPreferences(name, Context.MODE_PRIVATE); } } public String getServiceIp() { if (ServiceIp == null) { ArrayList listConfig; listConfig = DbManager.GetConfigs(); if (listConfig != null && listConfig.size() > 0) { ServiceIp = listConfig.get(0).getEc_ip(); } else { ServiceIp = ""; } } return ServiceIp; } public void setServiceIp(String serviceIp) { ServiceIp = serviceIp; } /************************* 以下1.0 *********************************/ public DetectVersionResponse getUpdateBean() { return updateBean; } public void setUpdateBean(DetectVersionResponse updateBean) { this.updateBean = updateBean; } public String getIdCard() { return idCard; } public void setIdCard(String idCard) { this.idCard = idCard; } /** * 设置数据保存 */ /* ==============================应用配置============================== */ /** 确认程序是否第一次打开 */ public boolean getOpenTime() { return getSharedPreferences("myapp_config", 0).getBoolean( "open_app_first_" + getVersion(), true); } /** 标记程序已经开启过 */ public void setOpenTime() { getSharedPreferences("myapp_config", 0).edit() .putBoolean("open_app_first_" + getVersion(), false).commit(); } /** 获取应用程序的版本号 */ public int getVersion() { int oldVersion = 0; try { oldVersion = getApplicationContext() .getPackageManager() .getPackageInfo(getApplicationContext().getPackageName(), 0).versionCode; } catch (Exception e) { LogUtil.d(TAG, "获取应用版本失败"); } return oldVersion; } /** 获取应用程序的版本信息 */ public String getVersionName() { String oldVersion = ""; try { oldVersion = getApplicationContext() .getPackageManager() .getPackageInfo(getApplicationContext().getPackageName(), 0).versionName; } catch (Exception e) { LogUtil.d(TAG, "获取应用版本信息失败"); } return oldVersion; } /** 获取手机型号 */ public String getModel() { return Build.MODEL; } /* ==============================数据库============================== */ private DbHelper dbHelper; private SQLiteDatabase db; /** 获取数据库对象 */ public synchronized DbHelper getDbHelper() { synchronized (lock) { if (dbHelper == null) dbHelper = new DbHelper(getApplicationContext()); } return dbHelper; } /** 获取数据库编辑对象 */ public synchronized SQLiteDatabase getDb() { synchronized (lock) { if (mOpenCounter.incrementAndGet() == 1) { if (db == null) db = getDbHelper().getWritableDatabase(); } } return db; } public synchronized void closeDatabase() { synchronized (lock) { if (mOpenCounter.decrementAndGet() == 0) { if (dbHelper != null) { dbHelper.close(); dbHelper = null; } } } } private AtomicInteger mOpenCounter = new AtomicInteger(); public Dialog initNetWork(Context context) { final EditText inputpress = new EditText(context); inputpress.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); Builder builder = new AlertDialog.Builder(context); builder.setTitle("没有可用的网络"); builder.setMessage("是否对网络进行设置?"); builder.setIcon(android.R.drawable.ic_dialog_info); builder.setView(null).setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = null; try { @SuppressWarnings("deprecation") String sdkVersion = android.os.Build.VERSION.SDK; if (Integer.valueOf(sdkVersion) > 10) { intent = new Intent( android.provider.Settings.ACTION_SETTINGS); } else { intent = new Intent(); ComponentName comp = new ComponentName( "com.android.settings", "com.android.settings.WirelessSettings"); intent.setComponent(comp); intent.setAction("android.intent.action.VIEW"); } intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } catch (Exception e) { LogUtil.i(TAG, "open network settings failed, please check..."); e.printStackTrace(); } } }); builder.setNegativeButton("取消", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); dialog = null; } }); Dialog dialog = null; // 网络弹框 if (dialog == null) { dialog = builder.create(); } if (type == null) { type = SharedPreferences2Obj.getInstance(this) .setName("MachineType").getObject("type", Integer.class); } if (type != null && type == 8) { // 手持机与手机类型不一样 dialog.getWindow().setType( WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); } dialog.show(); return dialog; } private SharedPreferences sp; public SharedPreferences getSp() { if (sp == null) { sp = MyApp.getInstance().getSharedPreferences("app_url", 0); } return sp; } public String getSharedpreferences(String key) { return sp.getString(key, ""); } public void setSharedString(String key, String d) { if (sp == null) { sp = this.getSharedPreferences("app_url", 0); } sp.edit().putString(key, d).commit(); } private int tempMode; public int getTempMode() { return tempMode; } public void setTempMode(int tempMode) { this.tempMode = tempMode; } // 添加Activity到容器中 public void addActivity(Activity activity) { if (activitys != null && activitys.size() > 0) { if (!activitys.contains(activity)) { activitys.add(activity); } } else { activitys.add(activity); } } public void removeActivity(Activity activity) { if (activitys != null && activitys.size() > 0) { if (activitys.contains(activity)) { activitys.remove(activity); } } } // 遍历所有Activity并finish public void exit() { if (activitys != null && activitys.size() > 0) { for (Activity activity : activitys) { activity.finish(); } } System.exit(0); } private SerialPort mSerialPort = null; public SerialPort getSerialPort() throws SecurityException, IOException, InvalidParameterException { if (mSerialPort == null) { /* Read serial port parameters */ SharedPreferences sp = getSharedPreferences("android_serialport_api.sample_preferences", MODE_PRIVATE); String path = sp.getString("DEVICE", "/dev/ttyMT2"); int baudrate = Integer.decode(sp.getString("BAUDRATE", "115200")); /* Check parameters */ if ( (path.length() == 0) || (baudrate == -1)) { throw new InvalidParameterException(); } /* Open the serial port */ // mSerialPort = new SerialPort(new File("/dev/ttySAC1"), 9600, 0); mSerialPort = new SerialPort(new File("/dev/ttyMT3"), 115200, 0); // mSerialPort = new SerialPort(new File("/dev/ttyS1"), baudrate, 0); } return mSerialPort; } public void closeSerialPort() { if (mSerialPort != null) { mSerialPort.close(); mSerialPort = null; } } }