9ae18403aa5c9846c4110a556488d1d34a527a41.svn-base 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. package eVVM.apk.ui.vaccination;
  2. import android.app.Activity;
  3. import android.app.Service;
  4. import android.content.Intent;
  5. import android.os.Vibrator;
  6. import android.support.annotation.Nullable;
  7. import android.util.Log;
  8. import android.view.View;
  9. import org.json.JSONArray;
  10. import org.json.JSONObject;
  11. import java.util.regex.Pattern;
  12. import butterknife.BindView;
  13. import butterknife.OnClick;
  14. import cn.bingoogolapple.photopicker.activity.BGAPhotoPickerActivity;
  15. import cn.bingoogolapple.qrcode.core.QRCodeView;
  16. import cn.bingoogolapple.qrcode.zxing.ZXingView;
  17. import eVVM.apk.R;
  18. import eVVM.apk.common.MyActivity;
  19. import eVVM.apk.helper.Encrypt;
  20. import eVVM.apk.helper.SPUtils;
  21. public class QrCodeActivity extends MyActivity implements QRCodeView.Delegate {
  22. @BindView(R.id.zxingview)
  23. ZXingView mZXingView;
  24. private static final String TAG = QrCodeActivity.class.getSimpleName();
  25. private static final int REQUEST_CODE_CHOOSE_QRCODE_FROM_GALLERY = 666;
  26. @Override
  27. protected int getLayoutId() {
  28. return R.layout.activity_qr_code;
  29. }
  30. @Override
  31. protected int getTitleId() {
  32. return R.id.tb_sao_title;
  33. }
  34. @Override
  35. public void onRightClick(View v) {
  36. /*
  37. 从相册选取二维码图片,这里为了方便演示,使用的是
  38. https://github.com/bingoogolapple/BGAPhotoPicker-Android
  39. 这个库来从图库中选择二维码图片,这个库不是必须的,你也可以通过自己的方式从图库中选择图片
  40. */
  41. Intent photoPickerIntent = new BGAPhotoPickerActivity.IntentBuilder(this)
  42. .cameraFileDir(null)
  43. .maxChooseCount(1)
  44. .selectedPhotos(null)
  45. .pauseOnScroll(false)
  46. .build();
  47. startActivityForResult(photoPickerIntent, REQUEST_CODE_CHOOSE_QRCODE_FROM_GALLERY);
  48. }
  49. @Override
  50. protected void initView() {
  51. mZXingView.setDelegate(this);
  52. }
  53. @Override
  54. protected void initData() {
  55. }
  56. @OnClick({R.id.tv_addbyhand, R.id.tv_skip})
  57. public void onViewClicked(View view) {
  58. switch (view.getId()) {
  59. case R.id.tv_addbyhand:
  60. //toast("手动输入");
  61. startActivity(InoculationRegistActivity.class);
  62. break;
  63. case R.id.tv_skip:
  64. startActivityFinish(ReadingActivity.class);
  65. break;
  66. }
  67. }
  68. @Override
  69. public void onScanQRCodeSuccess(String result) {
  70. try{
  71. vibrate(); //震动
  72. mZXingView.stopSpot(); // 停止识别
  73. // result = Encrypt.decrypt(result);
  74. if(result.split("▇").length == 4){
  75. String str = (String) SPUtils.get("INOCULATOR_LIST","");
  76. JSONArray inoculatorArr = new JSONArray();
  77. if(!str.equals("")){
  78. inoculatorArr = new JSONArray(str);
  79. }
  80. inoculatorArr.put(result);
  81. SPUtils.put("INOCULATOR_LIST",inoculatorArr.toString());
  82. startActivityFinish(ReadingActivity.class);
  83. }else{
  84. toast("未能识别二维码");
  85. }
  86. }catch (Exception e){
  87. e.printStackTrace();
  88. toast("未能识别二维码");
  89. }
  90. }
  91. public static boolean isInteger(String str) {
  92. Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
  93. return pattern.matcher(str).matches();
  94. }
  95. @Override
  96. public void onCameraAmbientBrightnessChanged(boolean isDark) {
  97. // 这里是通过修改提示文案来展示环境是否过暗的状态,接入方也可以根据 isDark 的值来实现其他交互效果
  98. String tipText = mZXingView.getScanBoxView().getTipText();
  99. String ambientBrightnessTip = "\n环境过暗,请打开闪光灯";
  100. if (isDark) {
  101. if (!tipText.contains(ambientBrightnessTip)) {
  102. mZXingView.getScanBoxView().setTipText(tipText + ambientBrightnessTip);
  103. }
  104. } else {
  105. if (tipText.contains(ambientBrightnessTip)) {
  106. tipText = tipText.substring(0, tipText.indexOf(ambientBrightnessTip));
  107. mZXingView.getScanBoxView().setTipText(tipText);
  108. }
  109. }
  110. }
  111. @Override
  112. public void onScanQRCodeOpenCameraError() {
  113. Log.e(TAG, "打开相机出错");
  114. }
  115. private void vibrate() {
  116. Vibrator vib = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);
  117. vib.vibrate(new long[]{100,200}, -1);
  118. }
  119. @Override
  120. protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
  121. super.onActivityResult(requestCode, resultCode, data);
  122. mZXingView.startSpotAndShowRect(); // 显示扫描框,并开始识别
  123. if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_CODE_CHOOSE_QRCODE_FROM_GALLERY) {
  124. final String picturePath = BGAPhotoPickerActivity.getSelectedPhotos(data).get(0);
  125. // 本来就用到 QRCodeView 时可直接调 QRCodeView 的方法,走通用的回调
  126. mZXingView.decodeQRCode(picturePath);
  127. /*
  128. 没有用到 QRCodeView 时可以调用 QRCodeDecoder 的 syncDecodeQRCode 方法
  129. 这里为了偷懒,就没有处理匿名 AsyncTask 内部类导致 Activity 泄漏的问题
  130. 请开发在使用时自行处理匿名内部类导致Activity内存泄漏的问题,处理方式可参考 https://github
  131. .com/GeniusVJR/LearningNotes/blob/master/Part1/Android/Android%E5%86%85%E5%AD%98%E6%B3%84%E6%BC%8F%E6%80%BB%E7%BB%93.md
  132. */
  133. // new AsyncTask<Void, Void, String>() {
  134. // @Override
  135. // protected String doInBackground(Void... params) {
  136. // return QRCodeDecoder.syncDecodeQRCode(picturePath);
  137. // }
  138. //
  139. // @Override
  140. // protected void onPostExecute(String result) {
  141. // if (TextUtils.isEmpty(result)) {
  142. // Toast.makeText(TestScanActivity.this, "未发现二维码", Toast.LENGTH_SHORT).show();
  143. // } else {
  144. // Toast.makeText(TestScanActivity.this, result, Toast.LENGTH_SHORT).show();
  145. // }
  146. // }
  147. // }.execute();
  148. }
  149. }
  150. @Override
  151. protected void onStart() {
  152. super.onStart();
  153. mZXingView.startCamera(); // 打开后置摄像头开始预览,但是并未开始识别
  154. // mZXingView.startCamera(Camera.CameraInfo.CAMERA_FACING_FRONT); // 打开前置摄像头开始预览,但是并未开始识别
  155. mZXingView.startSpotAndShowRect(); // 显示扫描框,并开始识别
  156. }
  157. @Override
  158. protected void onStop() {
  159. mZXingView.stopCamera(); // 关闭摄像头预览,并且隐藏扫描框
  160. super.onStop();
  161. }
  162. @Override
  163. protected void onDestroy() {
  164. mZXingView.onDestroy(); // 销毁二维码扫描控件
  165. super.onDestroy();
  166. }
  167. }