android 二维码简单开发

来源:互联网 发布:ping用的是什么端口 编辑:程序博客网 时间:2024/06/08 18:31

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">本文主要讲关于安卓的二维码的使用:扫描二维码,生成简单的二维码</span>

进入正题:二维码扫描需要一个相关的框架,谷歌官方提供了一个很好的框架: ZXing 框架,用起来也比较简单便捷

平台:android studio,首先是添加依赖,两种方式,直接在依赖中的搜索ZXing选择goodle 框架

或者可以选择 lib 添加依赖这里自己在 github 上找到一个库(可到https://github.com/yzbbanban查看相关项目,关于二维码的),这里就直接引入 lib 库,引入方式,现将 lib 导入 android 项目中

然后是添加依赖

这是添加之后的结果

代码部分就很简单了,布局文件就用一个 Button+TextView,TextView 用于显示扫描之后的结果

布局代码:

  <Button        android:id="@+id/btn"        android:layout_width="match_parent"        android:onClick="scan"        android:layout_height="wrap_content"        android:text="扫描" />    <TextView        android:id="@+id/tv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="Hello World!"        android:textColor="@color/colorAccent"        android:textSize="24sp" />
Button 加入 onClick 事件

 public void scan(View view) {        startActivityForResult(new Intent(MainActivity.this, CaptureActivity.class), 0);    }

直接启动扫描二维码相关的的CaptureActivity,也不需要在注册文件中加入权限(库中已加入相机权限),只需要直接调用即可,并且我们扫描之后需要获取返回值,所以需要 startActivityForResult 获取一个返回值
 @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if (resultCode == RESULT_OK) {            Bundle bundle = data.getExtras();            String text = bundle.getString("result");            Toast.makeText(this, text, Toast.LENGTH_SHORT).show();            tv.setText(text);        }    }
获取返回值呈现相关数据,其中 resultCode 中获取的参数为 lib 中CaptureActivity 的返回结果,其中相关的代码是这样的
  public void handleDecode(Result rawResult, Bundle bundle) {        inactivityTimer.onActivity();        beepManager.playBeepSoundAndVibrate();        Intent resultIntent = new Intent();        bundle.putInt("width", mCropRect.width());        bundle.putInt("height", mCropRect.height());        bundle.putString("result", rawResult.getText());        resultIntent.putExtras(bundle);        this.setResult(RESULT_OK, resultIntent);        CaptureActivity.this.finish();    }
即获取的的值是一个 bundle,我们就需要在 onActivityResult 中利用 bundle 回去相关参数

这样就完成了一个简单的扫描二维码的程序,可将二维码回去的结果生成一个字符串

线面介绍一下由文字生成二维码的代码:同样也是利用框架中的方法,稍微解释下就行

布局代码:

<EditText        android:id="@+id/et"        android:layout_width="match_parent"        android:layout_height="wrap_content" />    <Button        android:id="@+id/btn_make"        android:text="生成二维码"        android:onClick="make"        android:layout_width="match_parent"        android:layout_height="wrap_content" />    <ImageView        android:id="@+id/iv"        android:src="@mipmap/my_logo"        android:layout_gravity="center_horizontal"        android:layout_width="wrap_content"        android:layout_height="wrap_content" />
一个输入框,一个生成按钮,一个现实图片(Linnerlayout 布局)

方法很简单,获取输入框的数据,然后调用 EncodingUtils 中的creatorCode()方法,参数依次为:输入的内容,图片宽度,图片高度,logo 的图片(Bitmap)

public void make(View view) {        String intput = et.getText().toString().trim();        if ("".equals(intput)) {            Toast.makeText(this, "输入不为空", Toast.LENGTH_SHORT).show();        } else {            Bitmap b = EncodingUtils.createQRCode(intput, 500, 500, logo);            iv.setImageBitmap(b            );        }    }

然后就是主要代码的完整代码:
package com.wangban.yzbbanban.myapplication;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;import com.xys.libzxing.zxing.activity.CaptureActivity;import com.xys.libzxing.zxing.encoding.EncodingUtils;public class MainActivity extends AppCompatActivity {    private TextView tv;    private EditText et;    private ImageView iv;    private Bitmap logo;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        tv = (TextView) findViewById(R.id.tv);        et = (EditText) findViewById(R.id.et);        iv = (ImageView) findViewById(R.id.iv);        logo = BitmapFactory.decodeResource(getResources(), R.mipmap.my_logo);    }    public void scan(View view) {        startActivityForResult(new Intent(MainActivity.this, CaptureActivity.class), 0);    }    public void make(View view) {        String intput = et.getText().toString().trim();        if ("".equals(intput)) {            Toast.makeText(this, "输入不为空", Toast.LENGTH_SHORT).show();        } else {            Bitmap b = EncodingUtils.createQRCode(intput, 500, 500, logo);            iv.setImageBitmap(b            );        }    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if (resultCode == RESULT_OK) {            Bundle bundle = data.getExtras();            String text = bundle.getString("result");            Toast.makeText(this, text, Toast.LENGTH_SHORT).show();            tv.setText(text);        }    }}

0 0
原创粉丝点击