package com.ectrip.cyt.ui; import android.annotation.SuppressLint; import android.content.Intent; import android.content.res.AssetFileDescriptor; import android.hardware.Camera; import android.hardware.Camera.Parameters; import android.hardware.Camera.PreviewCallback; import android.hardware.Camera.Size; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.Vibrator; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.FrameLayout; import android.widget.TextView; import com.ectrip.cyt.bean.ConfigBean; 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.ActivitiesManager; import com.ectrip.cyt.utils.Base64; import com.ectrip.cyt.utils.CommetryUtils; import com.ectrip.cyt.utils.DesUtil; import com.ectrip.cyt.utils.LogUtil; import com.ectrip.cyt.utils.SharedPreferences2Obj; import com.ectrip.trips.check.R; import com.ectrip.trips.view.CameraPreview; import net.sourceforge.zbar.Config; import net.sourceforge.zbar.Image; import net.sourceforge.zbar.ImageScanner; import net.sourceforge.zbar.Symbol; import net.sourceforge.zbar.SymbolSet; import java.io.IOException; import java.util.ArrayList; /** * 二维码pos版扫描 */ public class ScanerOrderActivity extends BaseActivity { public final String TAG = "ScanerOrderActivity"; static { try { System.loadLibrary("iconv"); } catch (Exception e) { e.printStackTrace(); } catch (Throwable e) { e.printStackTrace(); } } private String titleName; private final float BEEP_VOLUME = 0.10f; private final long VIBRATE_DURATION = 200L; @SuppressWarnings("deprecation") private Camera mCamera; private CameraPreview mPreview; @SuppressWarnings("deprecation") Parameters mParameters; MediaPlayer player; private MediaPlayer mediaPlayer; ImageScanner scanner; private boolean playBeep = true; private String scannerResult = ""; private Integer Select; // 选择模式 检票 补票 查票 private WifiManager wifi; private boolean isConnected; private MyHandler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.app_ord_scanner); ActivitiesManager.getInstance().pushActivity(this); ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); NetworkInfo mWifi = connManager .getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (mWifi.isConnected()) { isConnected = true; } else { wifi = (WifiManager) getApplicationContext().getSystemService(ScanerOrderActivity.WIFI_SERVICE); if (wifi.isWifiEnabled()) { } else { wifi.setWifiEnabled(true); } } initConfig(); initView(); } private void initConfig() { findViewById(R.id.topBack).setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { finish(); } }); } @SuppressWarnings("deprecation") private void initView() { try { SharedPreferences2Obj.getInstance(ScanerOrderActivity.this) .setName("SelectAction").setObject("isStatistic", "0"); // 非统计 } catch (Exception e1) { e1.printStackTrace(); } try { titleName = getIntent().getStringExtra("titleName"); if (titleName != null) { ((TextView) findViewById(R.id.title)).setText(titleName); } else { ((TextView) findViewById(R.id.title)) .setText(R.string.scan_qr_code); } ((TextView) findViewById(R.id.title)).setVisibility(View.VISIBLE); FrameLayout preview = (FrameLayout) findViewById(R.id.cameraPreview); handler = new MyHandler(); mCamera = getCameraInstance(); mPreview = new CameraPreview(ScanerOrderActivity.this, mCamera, previewCb); preview.addView(mPreview); mCamera.setPreviewCallbackWithBuffer(previewCb); mCamera.startPreview(); if (isConnected == false && wifi != null && wifi.isWifiEnabled()) { wifi.setWifiEnabled(false); } } catch (Exception e1) { e1.printStackTrace(); } new Thread(new Runnable() { @Override public void run() { try { player = MediaPlayer.create(ScanerOrderActivity.this, R.raw.bad); /* Instance barcode scanner */ scanner = new ImageScanner(); scanner.setConfig(0, Config.POSITION, 3); scanner.setConfig(0, Config.POSITION, 3); // 初始化声音和震动 AudioManager audioService = (AudioManager) getSystemService(AUDIO_SERVICE); // 如果手机是震动模式就震动 if (audioService.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) { playBeep = false; } // 初始化声音 initBeepSound(); } catch (Exception e) { e.printStackTrace(); } } }).start(); } @SuppressWarnings("deprecation") PreviewCallback previewCb = new PreviewCallback() { @Override public void onPreviewFrame(byte[] data, Camera camera) { Camera.Parameters parameters = camera.getParameters(); Size size = parameters.getPreviewSize(); Image barcode = new Image(size.width, size.height, "NV21"); barcode.setData(data); barcode = barcode.convert("Y800"); int result = scanner.scanImage(barcode); // Toast.makeText(CameraTestActivity.this, result+"", // Toast.LENGTH_SHORT).show(); if (result != 0) { mCamera.setPreviewCallback(null); mCamera.stopPreview(); SymbolSet syms = scanner.getResults(); playBeepSoundAndVibrate();// 播放声音和振动代表成功获取二维码 for (Symbol sym : syms) { try { scannerResult = sym.getData().trim(); LogUtil.i(TAG, getString(R.string.scan_result) + " = " + scannerResult); if (scannerResult.startsWith("CYT_")) { // scannerResult = scannerResult.substring(scannerResult.indexOf("_") + 1,scannerResult.indexOf(",")); scannerResult = scannerResult.substring(scannerResult.indexOf("_") + 1, scannerResult.length()); ArrayList beans = DbManager.GetConfigs(); // 畅游通生成的订单ID: String ec_name = beans.get(0).getEc_signkey(); ec_name = AESEncryptor.decrypt(constant.decrypt, ec_name); scannerResult = DesUtil.decrypt(scannerResult, ec_name); } else if (scannerResult.startsWith("TDOS_")) { scannerResult = scannerResult.substring( scannerResult.indexOf("_") + 1, scannerResult.indexOf(",")); scannerResult = new String(Base64.decode(scannerResult), "utf-8"); } else if ((scannerResult.startsWith("TY_") || (scannerResult.startsWith("PMS_")))) { scannerResult = scannerResult; } else { scannerResult = scannerResult; } Message msg = new Message(); msg.what = 0; msg.obj = scannerResult; handler.handleMessage(msg); } catch (Exception e) { // player.start(); try { scannerResult = ""; e.printStackTrace(); MToast(ScanerOrderActivity.this, getString(R.string.setting_is_correct), MToast.LENGTH_LONG); errorGoon();// 播放错误信息 } catch (Exception e1) { e1.printStackTrace(); } } } } } }; @Override public void onPause() { super.onPause(); releaseCamera(); } @SuppressWarnings("deprecation") public static Camera getCameraInstance() { Camera c = null; try { c = Camera.open(); } catch (Exception e) { } return c; } @SuppressWarnings("deprecation") private void releaseCamera() { try { if (mCamera != null) { mCamera.setPreviewCallback(null); mCamera.stopPreview(); mCamera.release(); mCamera = null; } } catch (Exception e) { e.printStackTrace(); } } @SuppressWarnings("deprecation") public void errorGoon() { player.start(); mCamera.setPreviewCallback(previewCb); sleep(3000); mCamera.startPreview(); } private void sleep(int ms) { try { java.lang.Thread.sleep(ms); } catch (Exception e) { e.printStackTrace(); } } /** * 初始化声音 */ private void initBeepSound() { if (playBeep && mediaPlayer == null) { setVolumeControlStream(AudioManager.STREAM_MUSIC); mediaPlayer = new MediaPlayer(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setOnCompletionListener(beepListener); AssetFileDescriptor file = getResources().openRawResourceFd( R.raw.beep); try { mediaPlayer.setDataSource(file.getFileDescriptor(), file.getStartOffset(), file.getLength()); file.close(); mediaPlayer.setVolume(BEEP_VOLUME, BEEP_VOLUME); mediaPlayer.prepare(); } catch (IOException e) { mediaPlayer = null; } } } /** * 播放声音和震动 */ private void playBeepSoundAndVibrate() { if (playBeep && mediaPlayer != null) { mediaPlayer.start(); } // 打开震动 Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); vibrator.vibrate(VIBRATE_DURATION); } private final OnCompletionListener beepListener = new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mediaPlayer) { mediaPlayer.seekTo(0); } }; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { try { CommetryUtils.releaseCommery(this); } catch (Exception e) { e.printStackTrace(); } finish(); } return false; } ; @SuppressLint("HandlerLeak") private class MyHandler extends Handler { @Override public void handleMessage(Message msg) { if (Select == null) { try { Select = SharedPreferences2Obj .getInstance(ScanerOrderActivity.this) .setName("SelectAction") .getObject("Select", Integer.class); LogUtil.i(TAG, "====tempMode===" + Select + ""); } catch (Exception e) { e.printStackTrace(); } } switch (msg.what) { case 0: Intent intent = new Intent(ScanerOrderActivity.this, QRCodeOrderListActivity.class); intent.putExtra("mode", 1); intent.putExtra("input_orid", msg.obj.toString()); intent.putExtra("titleName", getString(R.string.show_result)); startActivity(intent); finish(); break; } } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (data == null) { return; } if (requestCode == 2 && resultCode == 2) { // initConfig(); // initView(); } } @Override protected void onDestroy() { if (isConnected == false && wifi != null && wifi.isWifiEnabled()) { try { wifi.setWifiEnabled(false); } catch (Exception e) { e.printStackTrace(); } } super.onDestroy(); try { CommetryUtils.releaseCommery(this); } catch (Exception e) { e.printStackTrace(); } } }