您的位置:首页 > 其它

二维码的生成与扫描

2018-01-03 09:43 225 查看
二维码:

是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;

在代码编制上巧妙的利用构成计算机内部逻辑基础的0和1比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图像输入设备或光电扫描设备自动识读以实现信息自动处理;

二维码能够在横向和纵向两个方位同时表达信息,因此能在很小的面积内表达大量的信息;

二维码相对于条形码的优势就是省空间;

zxing简介:

zxing是一个开放源码的,用java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的接口。

zxing可以实现使用手机的内置的摄像头完成条形码和二维码的扫描与解码。

zxing可以实现条形码和二维码的编码与解码。

zxing目前支持的的格式如下:

UPC-A,UPC-E

EAN-8,EAN-13

39码

93码

代码128

QR码

Android上zxing的使用:

这里使用的时候可以有两种形式:

1.将zxing的jar包放到工程的lib库中,然后还要拷贝相应的类源码到工程中去,整个文件夹拷贝过去也是很快的;

2.将已经弄好zxing的工程作为当前工程的依赖库,然后直接使用就可以了;

<Button
android:text="默认页面扫描"
android:onClick="defaultScan"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<Button
android:text="选择图片解析"
android:onClick="picScan"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<Button
android:text="生成"
android:onClick="shengCheng"
android:layout_width="match_parent"
android:layout_height="wrap_content" />


public class MainActivity extends AppCompatActivity {

private static final int REQUEST_CODE = 1001;
private static final int REQUEST_IMAGE = 1002;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

/**
*
* @param view
*/
public void defaultScan(View view) {
//调用的是zxing自带的扫描页面
Intent intent = new Intent(getApplication(), CaptureActivity.class);
startActivityForResult(intent, REQUEST_CODE);
}

/**
* 图片的解析
* @param view
*/
public void picScan(View view) {

Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, REQUEST_IMAGE);
}

/**
* 生成二维码
* @param view
*/
public void shengCheng(View view) {
Intent intent = new Intent(this,ShengChengActivity.class);
startActivity(intent);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == REQUEST_CODE) {
//处理扫描结果(在界面上显示)
if (null != data) {
//拿到传递回来的数据
Bundle bundle = data.getExtras();
if (bundle == null) {
return;
}

if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) {
//解析得到的结果
String result = bundle.getString(CodeUtils.RESULT_STRING);
Toast.makeText(this, "解析结果:" + result, Toast.LENGTH_LONG).show();
} else if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) {
Toast.makeText(MainActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show();
}
}
}else if (requestCode == REQUEST_IMAGE){
//取回选中的那种图片uri路径
Uri uri = data.getData();

try {
//解析图片的方法...ImageUtil.getImageAbsolutePath(this, uri)通过uri路径得到图片在手机中的绝对路径
CodeUtils.analyzeBitmap(ImageUtil.getImageAbsolutePath(this, uri), new CodeUtils.AnalyzeCallback() {
//Bitmap mBitmap 解析的那张图片, String result解析的结果
@Override
public void onAnalyzeSuccess(Bitmap mBitmap, String result) {
Toast.makeText(MainActivity.this, "解析结果:" + result, Toast.LENGTH_LONG).show();
}

@Override
public void onAnalyzeFailed() {
Toast.makeText(MainActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
a161

}
}


生成二维码
public class ShengChengActivity extends AppCompatActivity {

private EditText editText;
private ImageView imageView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sheng_cheng);

editText = findViewById(R.id.edit_text_01);
imageView = findViewById(R.id.image_view);

}

/**
* 普通的
* @param view
*/
public void normal(View view) {
String s = editText.getText().toString();
if (s==""){
return;
}

Bitmap bitmap = CodeUtils.createImage(s, 300, 300, null);
imageView.setImageBitmap(bitmap);
}

public void logoQR(View view) {

String s = editText.getText().toString();
if (s==""){
return;
}
//logo
Bitmap bitmap = CodeUtils.createImage(s, 300, 300, BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher));
imageView.setImageBitmap(bitmap);

}
}


在写完上面的代码后还要初始化一下,如果不初始化的话那就使用不了
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();

//初始化zxing库
ZXingLibrary.initDisplayOpinion(this);
}
}
这就是二维码的初始化


写完二维码还要调用权限
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: