PhomeScanerOrderActivity.java 10 KB
package com.ectrip.cyt.ui;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Vector;

import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Vibrator;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
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.Base64;
import com.ectrip.cyt.utils.DesUtil;
import com.ectrip.cyt.utils.LogUtil;
import com.ectrip.cyt.utils.SharedPreferences2Obj;
import com.ectrip.cyt.zxing.camera.CameraManager;
import com.ectrip.cyt.zxing.decoding.CaptureActivityHandler;
import com.ectrip.cyt.zxing.decoding.InactivityTimer;
import com.ectrip.cyt.zxing.view.ViewfinderView;
import com.ectrip.trips.check.R;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.Result;

/**
 * 手机版扫描二维码
 */
public class PhomeScanerOrderActivity extends BaseActivity implements Callback {

    private CaptureActivityHandler handler;
    private ViewfinderView viewfinderView;
    private boolean hasSurface;
    private Vector<BarcodeFormat> decodeFormats;
    private String characterSet;
    private InactivityTimer inactivityTimer;
    private MediaPlayer mediaPlayer;
    private boolean playBeep;
    private final float BEEP_VOLUME = 0.10f;
    private boolean vibrate;
    private String titleName;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 使屏幕不显示标题栏(必须要在setContentView方法执行前执行)
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        // 隐藏状态栏,使内容全屏显示(必须要在setContentView方法执行前执行)
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_capture2);
        // ViewUtil.addTopView(getApplicationContext(), this,
        // R.string.scan_card);
        CameraManager.init(getApplication());
        viewfinderView = (ViewfinderView) findViewById(R.id.viewfinder_view);

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

        findViewById(R.id.topBack).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
        hasSurface = false;
        inactivityTimer = new InactivityTimer(this);
    }

    @SuppressWarnings("deprecation")
    @Override
    protected void onResume() {
        super.onResume();
        SharedPreferences2Obj.getInstance(PhomeScanerOrderActivity.this)
                .setName("SelectAction").setObject("isStatistic", "0"); // 非统计
        SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview_view);
        SurfaceHolder surfaceHolder = surfaceView.getHolder();
        if (hasSurface) {
            initCamera(surfaceHolder);
        } else {
            surfaceHolder.addCallback(this);
            surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        }
        decodeFormats = null;
        characterSet = null;

        playBeep = true;
        AudioManager audioService = (AudioManager) getSystemService(AUDIO_SERVICE);
        if (audioService.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) {
            playBeep = false;
        }
        initBeepSound();
        vibrate = true;

    }

    /**
     * 处理扫描结果
     *
     * @param result
     */
    public void handleDecode(Result result) {
        inactivityTimer.onActivity();
        playBeepSoundAndVibrate();
        String resultString = result.getText().trim();
        LogUtil.i("扫码数据 = " + resultString);
        if (resultString.equals("")) {
            MToast(PhomeScanerOrderActivity.this,
                    getString(R.string.scan_fail), MToast.LENGTH_SHORT);
        } else {
            try {
                if(resultString.startsWith("CYT_")) {
                    resultString = resultString.substring(
                            resultString.indexOf("_") + 1,
                            resultString.indexOf(","));
                    ArrayList<ConfigBean> beans = DbManager.GetConfigs();
                    // 畅游通生成的订单ID:
                    String ec_name = beans.get(0).getEc_signkey();
                    LogUtil.i("ec_name = " + ec_name);
                    ec_name = AESEncryptor.decrypt(constant.decrypt, ec_name);
                    LogUtil.i("ec_name1 = " + ec_name);
                    LogUtil.i("resultString = " + resultString);
                    resultString = DesUtil.decrypt(resultString, ec_name);

                }else if(resultString.startsWith("TDOS_")){
                    resultString = resultString.substring(
                            resultString.indexOf("_") + 1,
                            resultString.indexOf(","));
                    resultString = new String(Base64.decode(resultString), "utf-8");
                }else if((resultString.startsWith("TY_") || (resultString.startsWith("PMS_")))){
                    resultString = resultString;
                }else{
                    resultString = resultString;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            Intent intent = new Intent(PhomeScanerOrderActivity.this,
                    QRCodeOrderListActivity.class);
            intent.putExtra("mode", 1);
            intent.putExtra("input_orid", resultString);
            LogUtil.i(getString(R.string.scan_result) + resultString);
            intent.putExtra("titleName", getString(R.string.show_result));
            startActivity(intent);
        }
            Boolean scanBack = SharedPreferences2Obj.getInstance(this).setName("config").getObject("scanBack", Boolean.class);
            if (scanBack != null && scanBack) {

            } else {

                PhomeScanerOrderActivity.this.finish();
            }

    }

    private void initCamera(SurfaceHolder surfaceHolder) {
        try {
            CameraManager.get().openDriver(surfaceHolder, PhomeScanerOrderActivity.this);
        } catch (IOException ioe) {
            return;
        } catch (RuntimeException e) {
            return;
        }
        if (handler == null) {
            handler = new CaptureActivityHandler(this, decodeFormats,
                    characterSet);
        }
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
                               int height) {

    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        if (!hasSurface) {
            hasSurface = true;
            initCamera(holder);
        }

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        hasSurface = false;

    }

    public ViewfinderView getViewfinderView() {
        return viewfinderView;
    }

    public Handler getHandler() {
        return handler;
    }

    public void drawViewfinder() {
        viewfinderView.drawViewfinder();

    }

    private void initBeepSound() {
        if (playBeep && mediaPlayer == null) {
            // The volume on STREAM_SYSTEM is not adjustable, and users found it
            // too loud,
            // so we now play on the music stream.
            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 final long VIBRATE_DURATION = 200L;

    private void playBeepSoundAndVibrate() {
        if (playBeep && mediaPlayer != null) {
            mediaPlayer.start();
        }
        if (vibrate) {
            Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
            vibrator.vibrate(VIBRATE_DURATION);
        }
    }

    /**
     * When the beep has finished playing, rewind to queue up another one.
     */
    private final OnCompletionListener beepListener = new OnCompletionListener() {
        public void onCompletion(MediaPlayer mediaPlayer) {
            mediaPlayer.seekTo(0);
        }
    };

    @Override
    protected void onPause() {
        super.onPause();
        if (handler != null) {
            handler.quitSynchronously();
            handler = null;
        }
        CameraManager.get().closeDriver();
    }

    @Override
    public void onBackPressed() {
        if (handler != null) {
            handler.quitSynchronously();
            handler = null;
        }
        CameraManager.get().closeDriver();
        super.onBackPressed();
    }

    @Override
    protected void onDestroy() {
        inactivityTimer.shutdown();
        super.onDestroy();
    }
}