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 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(); } }