ScanerHandsetActivity.java 6.68 KB
package com.ectrip.cyt.ui;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

import com.ectrip.cyt.bean.ConfigBean;
import com.ectrip.cyt.config.DevicTool;
import com.ectrip.cyt.config.MyApp;
import com.ectrip.cyt.constant.constant;
import com.ectrip.cyt.db.DbManager;
import com.ectrip.cyt.shield_home.LockLayer.MToast;
import com.ectrip.cyt.utils.AESEncryptor;
import com.ectrip.cyt.utils.DesUtil;
import com.ectrip.cyt.utils.LogUtil;
import com.ectrip.cyt.utils.SharedPreferences2Obj;
import com.ectrip.trips.check.R;

/**
 * @author jigo 手持机二维码扫描
 *
 */
public class ScanerHandsetActivity extends SerialPortHandsetActivity {
	private TextView topBack;
	private Button topBtns;
	private Button button1;
	private String titleName;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.app_scan_handset);
		init();
	}

	private void init() {
		SharedPreferences2Obj.getInstance(ScanerHandsetActivity.this)
				.setName("SelectAction").setObject("isStatistic", "0"); // 非统计
		// 当判断是否为手持机
		if (DevicTool.getInstance().isSerialPortHandset()) {
			initSerialPortHandset();
		}
		titleName = getIntent().getStringExtra("titleName");
		if (titleName != null) {
			((TextView) findViewById(R.id.title)).setText(titleName);
		} else {
			((TextView) findViewById(R.id.title))
					.setText(getString(R.string.scan_qr_code));
		}

		((TextView) findViewById(R.id.title)).setVisibility(View.VISIBLE);
		topBtns = (Button) findViewById(R.id.topBtns);
		topBtns.setVisibility(View.GONE);
		topBack = (TextView) findViewById(R.id.topBack);
		topBack.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				finish();
			}
		});

		button1 = (Button) findViewById(R.id.button1);
		button1.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				ScanCode();
				new Handler().postDelayed(new Runnable() {
					public void run() {
						ScanCode();
					}
				}, 600);
			}
		});

	}

	/*
	 * 下面都是手持机二维码代码
	 */

	private void initSerialPortHandset() {
		setpower("/sys/class/gpio/gpio28/value", true);
		try {
			Thread.sleep(500);
		} catch (InterruptedException e) {
		}
		setpower("/sys/class/gpio/gpio28/value", false); // 给二代证下电
		try {
			Thread.sleep(500);
		} catch (InterruptedException e) {
		}
		setpower("/sys/class/gpio/gpio114/value", true);
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
		}
		// thread=new ScanerHandsetThread();
		// thread.start();
	}

	/**
	 * 扫描二维码
	 */
	public void ScanCode() {
		byte[] arrayOfByte = { 0x1b, 0x31 };
		try {
			mOutputStream.write(arrayOfByte);
		} catch (IOException localIOException) {
			localIOException.printStackTrace();
		}
	}

	private int second = 0;
	StringBuffer StringBuffer = new StringBuffer();

	private String regEx = "[\u4e00-\u9fa5]";
	private Pattern pat = Pattern.compile(regEx);

	public boolean isContainsChinese(String str) {
		Matcher matcher = pat.matcher(str);
		boolean flg = false;
		if (matcher.find()) {
			flg = true;
		}
		return flg;
	}

	@Override
	protected void onDataReceived(final byte[] buffer, final int size) {
		runOnUiThread(new Runnable() {
			public void run() {
				String tempstr = new String(buffer, 0, size);
				try {
					String resultString = new String(tempstr.getBytes("GBK"),
							"GBK");
					if (resultString.contains("CYT_")) {
						if (second < 2) {
							StringBuffer.append(resultString);
						}
						second += 1;
					} else {
						if (second < 2) {
							StringBuffer.append(resultString);
						}
					}
					System.out.println("resultString:" + resultString);
					if (second == 2) {
						synchronized (StringBuffer) {

							resultString = StringBuffer.toString();
							resultString = resultString.substring(
									resultString.indexOf("_") + 1,
									resultString.indexOf(","));
							ArrayList<ConfigBean> beans = DbManager
									.GetConfigs();
							// 畅游通生成的订单ID:
							String ec_name = beans.get(0).getEc_signkey();
							ec_name = AESEncryptor.decrypt(constant.decrypt,
									ec_name);
							resultString = DesUtil.decrypt(resultString,
									ec_name);

							if (resultString != null
									&& isContainsChinese(resultString)) {
								try {
									MToast(ScanerHandsetActivity.this,
											resultString, MToast.LENGTH_LONG);
								} catch (Exception e) {
									e.printStackTrace();
								}
								return;
							}

							Intent intent = new Intent(
									ScanerHandsetActivity.this,
									QRCodeOrderListActivity.class);
							intent.putExtra("mode", 1);
							intent.putExtra("input_orid", resultString);
							LogUtil.i("scan_result:" + resultString);
							intent.putExtra("titleName",
									getString(R.string.show_result));
							startActivity(intent);
							finish();
						}
					}
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
					try {
						e.printStackTrace();
						MToast(ScanerHandsetActivity.this,
								getString(R.string.setting_is_correct),
								MToast.LENGTH_LONG);
					} catch (Exception e1) {
						e1.printStackTrace();
					}
				} catch (Exception e) {
					e.printStackTrace();
					try {
						e.printStackTrace();
						MToast(ScanerHandsetActivity.this,
								getString(R.string.setting_is_correct),
								MToast.LENGTH_LONG);
					} catch (Exception e1) {
						e1.printStackTrace();
					}
				}
			}
		});
	}

	private void setpower(String path, boolean on) {
		File file;
		FileWriter fr;
		try {
			file = new File(path);
			fr = new FileWriter(file);
			if (on)
				fr.write("1");
			else
				fr.write("0");
			fr.close();
		} catch (IOException e) {
			LogUtil.e(TAG, e.toString());
		}
	}

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			setpower("/sys/class/gpio/gpio114/value", false);
			finish();
		}
		return false;
	}

	/*
	 * 按返回键
	 */
	@Override
	public void onBackPressed() {
		setpower("/sys/class/gpio/gpio114/value", false);
		super.onBackPressed();
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		try {
			Thread.sleep(600);
		} catch (InterruptedException e) {
		}
		setpower("/sys/class/gpio/gpio114/value", false);
		// if (mReadThread != null)
		// mReadThread.interrupt();
	}
}