content: package com.google.zxing.activity;
  
  import android.content.Intent;
  import android.content.res.AssetFileDescriptor;
  import android.graphics.Bitmap;
  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.support.v7.app.AppCompatActivity;
  import android.view.SurfaceHolder;
  import android.view.SurfaceHolder.Callback;
  import android.view.SurfaceView;
  import android.widget.Toast;
  
  import com.google.zxing.BarcodeFormat;
  import com.google.zxing.Result;
  import com.jinlin.zxing.R;
  import com.google.zxing.camera.CameraManager;
  import com.google.zxing.decoding.CaptureActivityHandler;
  import com.google.zxing.decoding.InactivityTimer;
  import com.google.zxing.view.ViewfinderView;
  
  import java.io.IOException;
  import java.util.Vector;
  
  /**
   * Initial the camera
   *
   * @author Ryan.Tang
   */
  public class CaptureActivity extends AppCompatActivity 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 static final float BEEP_VOLUME = 0.10f;
      private boolean vibrate;
  
      /**
       * Called when the activity is first created.
       */
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.camera);
          getIntentData();
          //ViewUtil.addTopView(getApplicationContext(), this, R.string.scan_card);
          CameraManager.init(getApplication());
          viewfinderView = (ViewfinderView) findViewById(R.id.viewfinder_view);
          hasSurface = false;
          inactivityTimer = new InactivityTimer(this);
      }
  
      private void getIntentData() {
          Intent dataIntent = getIntent();
      }
  
      @Override
      protected void onResume() {
          super.onResume();
          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;
  
      }
  
      @Override
      protected void onPause() {
          super.onPause();
          if (handler != null) {
              handler.quitSynchronously();
              handler = null;
          }
          CameraManager.get().closeDriver();
      }
  
      @Override
      protected void onDestroy() {
          inactivityTimer.shutdown();
          super.onDestroy();
      }
  
      /**
       * Handler scan result  处理扫描的结果
       *
       * @param result
       * @param barcode
       */
      public void handleDecode(Result result, Bitmap barcode) {
          inactivityTimer.onActivity();
          playBeepSoundAndVibrate();
          String resultString = result.getText();
  
          Toast.makeText(this, resultString, Toast.LENGTH_SHORT).show();
      }
  
      private void initCamera(SurfaceHolder surfaceHolder) {
          try {
              CameraManager.get().openDriver(surfaceHolder);
          } 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 static 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);
          }
      };
  }