在做项目中,很多地方都会用到二维码

在这个demo中,演示了怎样把一个字符串存放到二维码中

并将该二维码保存到SD卡中/code目录下

代码如下


package com.example.qrcodetest;


import com.google.zxing.WriterException;

import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.Toast;


public class CODEActivity extends Activity implements OnClickListener{


private Button btn;

private String UID = "my_uid_test";//这个是要保存在二维码中的数据

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_code);

btn = (Button) findViewById(R.id.button1);

btn.setOnClickListener(this);

}

@Override

public void onClick(View arg0) {

// TODO Auto-generated method stub

if(arg0.equals(btn)){

try {

QRCodeEncoder encoder = new QRCodeEncoder();

boolean flag = encoder.WriteBitmap(encoder

.Create2DCode(UID));

Toast.makeText(this, "flag = " + flag, Toast.LENGTH_LONG).show();

} catch (WriterException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}



//制作二维码类 QRCodeEncoder

package com.example.qrcodetest;


import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;


import com.google.zxing.BarcodeFormat;

import com.google.zxing.MultiFormatWriter;

import com.google.zxing.WriterException;

import com.google.zxing.common.BitMatrix;


import android.graphics.Bitmap;

import android.net.Uri;

import android.os.Environment;

import android.util.Log;


public class QRCodeEncoder {

private String qrcode = "";


/** 

* 用字符串生成二维码 

* @param str 

* @author zhouzhe@lenovo-cw.com 

* @return 

* @throws WriterException 

*/  

public Bitmap Create2DCode(String str) throws WriterException {  

//生成二维矩阵,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败 

qrcode =  str;

BitMatrix matrix = new MultiFormatWriter().encode(str,BarcodeFormat.QR_CODE, 300, 300);  

int width = matrix.getWidth();  

int height = matrix.getHeight();  

//二维矩阵转为一维像素数组,也就是一直横着排了  

int[] pixels = new int[width * height];  

for (int y = 0; y < height; y++) {  

for (int x = 0; x < width; x++) {  

if(matrix.get(x, y)){  

pixels[y * width + x] = 0xff000000;  

}  


}

}


Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 

//通过像素数组生成bitmap,具体参考api 

bitmap.setPixels(pixels, 0, width, 0, 0, width, height);  

return bitmap;

}


public boolean  WriteBitmap(Bitmap bm){


File folder = new File(Environment.getExternalStorageDirectory() + "/code/");


if(!folder.exists()){// 如果文件夹不存在,创建一个

folder.mkdirs(); //这里要用.mkdirs()方法,父类文件夹不存在时,可以自动创建

}                  //而如果用.mkdir()方法则不会自动创建


File file = new File(folder.getAbsolutePath(), "cod.png");


try {

FileOutputStream out = new FileOutputStream(file);

bm.compress(Bitmap.CompressFormat.PNG, 90, out);

out.flush();

out.close();


} catch (FileNotFoundException e) {

e.printStackTrace();

Log.v("qrcode", "FileNotFoundException");

return false;

} catch (IOException e) {

e.printStackTrace();

Log.v("qrcode", "IOException2");

return false;

}

return true;

}

}


//xml文件 里面只有一个Button

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".CODEActivity" >


    <Button

        android:id="@+id/button1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"

        android:layout_alignParentRight="true"

        android:layout_alignParentTop="true"

        android:layout_marginTop="50dp"

        android:text="CODE" />


</RelativeLayout>


//manifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.example.qrcodetest"

    android:versionCode="1"

    android:versionName="1.0" >


    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="18" />


     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

     

    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name="com.example.qrcodetest.CODEActivity"

            android:label="@string/app_name" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />


                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>


</manifest>


//***********************************

最重要的千万别忘记导入 core.jar包

这个包可到如下网站下载

http://download.youkuaiyun.com/detail/yue670176656/7602821