根据大神的二维码扫描初体验
2016-07-06 10:41
375 查看
在我们的项目中经常会用到二维码扫描,话不多说(也没啥说的),上步骤:
1、把zxing.jar导进项目
2、有三个类直接导进项目就可以了,里面大概是一些自定义的控件,例如:扫描框样式啦等等。。。。如果有需要改这些的就改着三个里面的代码就好啦····
去源码里找就可以啦,哈·
3、接下来就是关于对二维码的破解了。
这是处理二维码扫描的Activity。破解完以后可以根据需要返回到我们的原Activity.这就完啦。拿到处理后字符串想干嘛干嘛去吧···
源码地址
1、把zxing.jar导进项目
2、有三个类直接导进项目就可以了,里面大概是一些自定义的控件,例如:扫描框样式啦等等。。。。如果有需要改这些的就改着三个里面的代码就好啦····
去源码里找就可以啦,哈·
3、接下来就是关于对二维码的破解了。
public class MipcaActivityCapture extends Activity 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.activity_capture); //ViewUtil.addTopView(getApplicationContext(), this, R.string.scan_card); CameraManager.init(getApplication()); viewfinderView = (ViewfinderView) findViewById(R.id.viewfinder_view); Button mButtonBack = (Button) findViewById(R.id.button_back); mButtonBack.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { MipcaActivityCapture.this.finish(); } }); hasSurface = false; inactivityTimer = new InactivityTimer(this); } @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(); } /** * 处理扫描结果,返回到我们原来的界面,尽量不要带bitmap回到原来的界面,因为超过40k的bitmap都会被毙掉。导致退出 */ public void handleDecode(Result result, Bitmap barcode) { inactivityTimer.onActivity(); playBeepSoundAndVibrate(); String resultString = result.getText(); if (resultString.equals("")) { Toast.makeText(MipcaActivityCapture.this, "Scan failed!", Toast.LENGTH_SHORT).show(); }else { Intent resultIntent = new Intent(); Bundle bundle = new Bundle(); bundle.putString("result", resultString); bundle.putParcelable("bitmap", barcode); resultIntent.putExtras(bundle); this.setResult(RESULT_OK, resultIntent); } MipcaActivityCapture.this.finish(); } 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); } }; }
这是处理二维码扫描的Activity。破解完以后可以根据需要返回到我们的原Activity.这就完啦。拿到处理后字符串想干嘛干嘛去吧···
源码地址
相关文章推荐
- ssm+maven+maven_pojo_generate
- 欢迎使用CSDN-markdown编辑器
- 产品设计-产品交互-人性化-是不是好用
- 根据阈值清理指定路径的文件 linux
- Android studio 2.2Preview4 中出现 Plugin is too old问题
- webstorm取消撤销快捷键
- HDU 1253 胜利大逃亡
- 搬迁至http://www.macode.net/
- Java BufferedWriter BufferedReader 源码分析
- NYOJ1063_生活的烦恼
- Jade基础语法介绍
- python变量不能以数字打头详解
- 批处理删除svn信息:批处理
- curl多线程采集----评论
- Python导入机制-查找模块
- Android Studio编译时路径过长的问题
- HibernateTemplate
- Queue 与 List
- 现代OGL Shader中VAO,VBO和GL_ELEMENT_ARRAY_BUFFER之间的关系
- 蚁群算法代码