增加二维码扫描
1、资料参考http://blog.csdn.net/xiaanming/article/details/10163203
代码例程http://download.csdn.net/detail/xiaanming/5990219
2、步骤
a、将com.mining.app.zxing.camera,com.mining.app.zxing.decoding,com.mining.app.zxing.view这三个包拷贝到项目中
b、com.example.qr_codescan包里面有一个MipcaActivityCapture,直接引入项目
主要关注里面的handleDecode(Result result, Bitmap barcode)方法,扫描完成之后将扫描到的结果和二维码的bitmap当初参数传递到handleDecode(Result result, Bitmap barcode)里面
c、按钮添加Intent intent = new Intent(); intent.setClass(MainActivity.this, MipcaActivityCapture.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivityForResult(intent, SCANNIN_GREQUEST_CODE);
返回结果添加
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case SCANNIN_GREQUEST_CODE: if(resultCode == RESULT_OK){ Bundle bundle = data.getExtras(); Toast.makeText(getApplicationContext(), bundle.getString("result"), Toast.LENGTH_SHORT).show(); //��ʾɨ�赽������ //mTextView.setText(bundle.getString("result")); //��ʾ // mImageView.setImageBitmap((Bitmap) data.getParcelableExtra("bitmap")); } break; }
3、关于摄像头预览拉伸问题
在CameraConfigurationmanager.java下找到initFromCameraParameters,在Log.d(TAG, "Screen resolution: " + screenResolution);
后面加入
Point screenResolutionForCamera = new Point(); screenResolutionForCamera.x = screenResolution.x; screenResolutionForCamera.y = screenResolution.y; // preview size is always something like 480*320, other 320*480 if (screenResolution.x < screenResolution.y) { screenResolutionForCamera.x = screenResolution.y; screenResolutionForCamera.y = screenResolution.x; }
修改
cameraResolution = getCameraResolution(parameters, screenResolutionForCamera);
即可解决
4关于扫描框大小问题
找到Cameramanager.java下的
private static final int MIN_FRAME_WIDTH = 240; private static final int MIN_FRAME_HEIGHT = 240; private static final int MAX_FRAME_WIDTH = 480; private static final int MAX_FRAME_HEIGHT = 360;
为修改扫描框的大小,先修改为
private static int MIN_FRAME_WIDTH = 240; private static int MIN_FRAME_HEIGHT = 240; private static int MAX_FRAME_WIDTH = 480; private static int MAX_FRAME_HEIGHT = 360;
然后在public Rect getFramingRect()
下加入
MIN_FRAME_WIDTH = Dp2Px(context,180); MIN_FRAME_HEIGHT =Dp2Px(context,180) ; MAX_FRAME_WIDTH = Dp2Px(context,280); MAX_FRAME_HEIGHT =Dp2Px(context,240) ;
分辨率转换
public static int Dp2Px( Context context,float dp) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dp * scale + 0.5f); }
5、关于扫描结果返回出现异常
找到MipcaActivityCapture.java
public void handleDecode(Result result, Bitmap barcode)
注释掉bundle.putParcelable("bitmap", barcode);
因为=返回的图片太大导致
7、识别图片二维码
参考
http://blog.csdn.net/qq_21445563/article/details/50886879
http://download.csdn.net/detail/yangfan106/9295769
发现识别的二维码图片远远落后于微信的识别能力,有些不规则的就不能识别,但是微信都可以