Android平台上二维码的生成与扫描
2016-07-09 07:47
429 查看
二维码,在现实生活中有很多的应用,手机二维码功能更是最常见的了,今天我们就在Android平台上实现二维码的生成与扫描
一、准备
工具库下载:BarCodeTest (可点击直接下载或者去以下链接下载适合自己的:https://github.com/zxing)
二、开始编程
1、导入下载的BarCodeTest库,点击左上角的“File->import”进行导入下载好的库文件工程,如下图所示选择“Existing Project into Workspace”选项后继续点击“Next”
[align=left] [/align]
点击“Next”界面之后,出现如下图所示界面,进行文件的选择,然后单击Finish完成导入。
2、导入完成之后,我们看到在项目中含有错误提示,此时需要进行对BarCodeTest进行配置,具体步骤是右键点击项目,然后进入“属性”对话框,进行如下图所示配置,即给项目一个SDK版本和将其设置为库文件,最后点击“OK”完成:
3、配置完成之后,我们发现项目中仍有问题,我们需要定位到错误文件DecodeHandler.java类和CaptureActivityHandler类,分别对以上类进行如下代码修改(即将Switch条件判断语句更改为If else语句):
更改CaptureActivityHandler后的代码:
4、在完成以上工作之后,我们的准备工作已经完成,接着我们开始新建一个项目,项目中,我们需要使用到刚才和创建的库,故我们进行导入,右键单击项目。然后进行点击“属性”,进入到如下界面,点击“Add”按钮进行项目库的添加,添加BarCodeTest项目即可
[align=left] [/align]
5、现在我们进行布局文件的设置,其中activity-main中代码如下所示:
界面结果为如下所示:
6、为了能够显示生成的二维码,我们需要新建一个布局文件,命名为qrcoderesult.xml,其代码如下所示:
效果如下图所示:
7、在创建完布局文件之后,我们进行编写类代码,其中MainActivity代码如下所示:
8、为了接受生成的二维码,我们创建一个新类QrcodeResult,用于接收MainActivity类中传来的字符串并进行二维码的生成与显示,代码如下所示:
9、在完成以上工作之后,我们就能够进行测试,点击运行,能够进行扫描二维码如下图所示:
也能够生成二维码
10、在上述案例中,我们完成了简单的而二维码生成与扫描的功能,但是实际使用中不会仅仅用于生成,因此我们需要在项目中灵活的使用。
以上就是Android平台上二维码的生成与扫码的实现
一、准备
工具库下载:BarCodeTest (可点击直接下载或者去以下链接下载适合自己的:https://github.com/zxing)
二、开始编程
1、导入下载的BarCodeTest库,点击左上角的“File->import”进行导入下载好的库文件工程,如下图所示选择“Existing Project into Workspace”选项后继续点击“Next”
[align=left] [/align]
点击“Next”界面之后,出现如下图所示界面,进行文件的选择,然后单击Finish完成导入。
2、导入完成之后,我们看到在项目中含有错误提示,此时需要进行对BarCodeTest进行配置,具体步骤是右键点击项目,然后进入“属性”对话框,进行如下图所示配置,即给项目一个SDK版本和将其设置为库文件,最后点击“OK”完成:
3、配置完成之后,我们发现项目中仍有问题,我们需要定位到错误文件DecodeHandler.java类和CaptureActivityHandler类,分别对以上类进行如下代码修改(即将Switch条件判断语句更改为If else语句):
@Override public void handleMessage(Message message) { if (message.what==R.id.decode) { //Log.d(TAG, "Got decode message"); decode((byte[]) message.obj, message.arg1, message.arg2); } else if (message.what==R.id.quit){ Looper.myLooper().quit(); } }
更改CaptureActivityHandler后的代码:
@Override public void handleMessage(Message message) { if (message.what==R.id.auto_focus) { if (state == State.PREVIEW) { CameraManager.get().requestAutoFocus(this, R.id.auto_focus); } } else if(message.what==R.id.restart_preview){ Log.d(TAG, "Got restart preview message"); restartPreviewAndDecode(); } else if(message.what==R.id.decode_succeeded){ Log.d(TAG, "Got decode succeeded message"); state = State.SUCCESS; Bundle bundle = message.getData(); /***********************************************************************/ Bitmap barcode = bundle == null ? null : (Bitmap) bundle.getParcelable(DecodeThread.BARCODE_BITMAP); activity.handleDecode((Result) message.obj, barcode); /***********************************************************************/ } else if(message.what==R.id.decode_failed){ // We're decoding as fast as possible, so when one decode fails, start another. state = State.PREVIEW; CameraManager.get().requestPreviewFrame(decodeThread.getHandler(), R.id.decode); } else if(message.what==R.id.return_scan_result){ Log.d(TAG, "Got return scan result message"); activity.setResult(Activity.RESULT_OK, (Intent) message.obj); activity.finish(); } else if(message.what==R.id.launch_product_query){ Log.d(TAG, "Got product query message"); String url = (String) message.obj; Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); activity.startActivity(intent); } }
4、在完成以上工作之后,我们的准备工作已经完成,接着我们开始新建一个项目,项目中,我们需要使用到刚才和创建的库,故我们进行导入,右键单击项目。然后进行点击“属性”,进入到如下界面,点击“Add”按钮进行项目库的添加,添加BarCodeTest项目即可
[align=left] [/align]
5、现在我们进行布局文件的设置,其中activity-main中代码如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.android_008_qrcodetest.MainActivity" android:background="@drawable/bg" > <Button android:id="@+id/scan" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="27dp" android:text="扫描二维码" /> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:editable="true" android:text="show" /> <EditText android:id="@+id/input" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="请输入要生成二维码的信息" /> <Button android:id="@+id/gen" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="生成二维码" /> <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" /> </LinearLayout>
界面结果为如下所示:
6、为了能够显示生成的二维码,我们需要新建一个布局文件,命名为qrcoderesult.xml,其代码如下所示:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@drawable/bg"> <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" /> </LinearLayout>
效果如下图所示:
7、在创建完布局文件之后,我们进行编写类代码,其中MainActivity代码如下所示:
package com.example.android_008_qrcodetest; import com.zxing.activity.CaptureActivity; import com.zxing.encoding.EncodingHandler; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private Button scanButton; private TextView text; private EditText input; private Button genButton; private ImageView img; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); scanButton = (Button) findViewById(R.id.scan); text = (TextView) findViewById(R.id.text); scanButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "扫描", 1).show(); Intent startScan = new Intent(MainActivity.this, CaptureActivity.class); // startActivity(startScan); // 用于打开意图,此意图能够得到返回值 startActivityForResult(startScan, 0); } }); input = (EditText) findViewById(R.id.input); genButton = (Button) findViewById(R.id.gen); // img=(ImageView) findViewById(R.id.img); genButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub try { // 生成与获取二维码 String in = input.getText().toString(); Bitmap qrcode = EncodingHandler.createQRCode(in, 800); if (in.equals("")) { Toast.makeText(MainActivity.this, "请添加内容然后生成二维码", 1) .show(); } else { // img.setImageBitmap(qrcode); Intent intent = new Intent(MainActivity.this, QrcodeResult.class); intent.putExtra("inputqrcode", in); startActivity(intent); } } catch (Exception e) { e.printStackTrace(); } } }); } // 用来接收扫描的Activity传回的值 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { String result = data.getExtras().getString("result"); text.setText(result); } } }
8、为了接受生成的二维码,我们创建一个新类QrcodeResult,用于接收MainActivity类中传来的字符串并进行二维码的生成与显示,代码如下所示:
package com.example.android_008_qrcodetest; import com.zxing.activity.CaptureActivity; import com.zxing.encoding.EncodingHandler; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; public class QrcodeResult extends Activity { private Button scanButton; private TextView text; private Button genButton; private ImageView img; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.qrcoderesult); img=(ImageView) findViewById(R.id.img); String in =getIntent().getStringExtra("inputqrcode"); System.out.println(in); try { //生成与获取二维码 Bitmap qrcode=EncodingHandler.createQRCode(in,800); if(in.equals("")) { Toast.makeText(QrcodeResult.this, "请添加内容然后生成二维码", 1).show(); } else { img.setImageBitmap(qrcode); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
9、在完成以上工作之后,我们就能够进行测试,点击运行,能够进行扫描二维码如下图所示:
也能够生成二维码
10、在上述案例中,我们完成了简单的而二维码生成与扫描的功能,但是实际使用中不会仅仅用于生成,因此我们需要在项目中灵活的使用。
以上就是Android平台上二维码的生成与扫码的实现
相关文章推荐
- [I.MX6Q][Android6.0.1_r3]之源码获取及编译
- 仿格瓦拉双层拖拽布局,格瓦拉电影详情界面
- 动态获取PullToRefreshScrollView滚动条的值
- Android之文章权限的概念
- Android值数据读写在sd卡需要注意的事项
- Android 新特性学习总结
- Android开发环境搭建:离线安装ADT插件和安装SDK
- Animation 动画介绍和实现
- Android 动画
- 在Ubuntu系统中下载Android源码
- Android中SQLite使用事务
- Android判断EditText输入的数字、中文还是字母方法
- Android Studio官方文档之使用Lint提高你的代码质量篇
- 学习android源码第一天
- Android中事件处理机制一分钟理清思路
- android之Activity回传数据
- Android 实现下载时主界面与详细界面一致更新
- Android 实现下载时主界面与详细界面一致更新
- Android局部模糊处理
- Android(ADT Android SDK Manager安装Intel Hardware Accelerated Execution Manager)