Android 简单生成二维码名片

二维码名片是现在很常见的,这里只是一个简单生成二维码,如果对二维码名片的内容没有过多的要求,可以借鉴一下。生成二维码用的是谷歌的Zxing库,关于扫码,这里就不多说了。

zxing下载地址:http://download.csdn.net/detail/qq55214/9665820

public class MainActivity extends AppCompatActivity {

    private static final int QR_WIDTH = 400;
    private static final int QR_HEIGHT = 400;
    private ArrayList<String> card = new ArrayList<>();

    private ImageView mIv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mIv = (ImageView) findViewById(R.id.main_iv);

        card.clear();
        card.add("张三");
        card.add("18766561626");
        card.add("公司_不知道");
        card.add("职位_不知道");
        card.add("职称_不知道");
        card.add("邮箱_不知道");
        card.add("地址_不知道");

        TextView tv = (TextView) findViewById(R.id.main_tv);
        tv.setText(card.toString());

    }

    /**
     *
     * @param view
     */
    public void qrcode(View view){
        mIv.setImageBitmap(createQrcode(enQrCodeOneContact(card)));
    }

    /**
     * 生成二维码
     *
     * @param qrcode
     */
    public Bitmap createQrcode(String qrcode) {
        try {
            QRCodeWriter writer = new QRCodeWriter();
            if (qrcode == null || "".equals(qrcode) || qrcode.length() < 1) {
                Toast.makeText(MainActivity.this,"数据为空",Toast.LENGTH_SHORT).show();
                return null;
            }
            // TODO 编码格式
            Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
            hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
            // TODO 二维码宽高、颜色
            BitMatrix bitMatrix = writer.encode(qrcode,
                    BarcodeFormat.QR_CODE, QR_WIDTH, QR_HEIGHT, hints);
            int[] pixels = new int[QR_WIDTH * QR_HEIGHT];
            for (int y = 0; y < QR_HEIGHT; y++) {
                for (int x = 0; x < QR_WIDTH; x++) {
                    if (bitMatrix.get(x, y)) {
                        pixels[y * QR_WIDTH + x] = 0xff0000ff;
                    } else {
                        pixels[y * QR_WIDTH + x] = 0xffffffff;
                    }

                }
            }

            Bitmap bitmap = Bitmap.createBitmap(QR_WIDTH, QR_HEIGHT,
                    Bitmap.Config.ARGB_8888);
            bitmap.setPixels(pixels, 0, QR_WIDTH, 0, 0, QR_WIDTH, QR_HEIGHT);
            return  bitmap;
        } catch (Exception e) {
            Log.e("All_Exception", e.toString());
            Toast.makeText(MainActivity.this,"数据太大,请重新选择",Toast.LENGTH_SHORT).show();
        }
        return null;
    }

    /**
     * 组成NameCard名片格式
     * @param nameCard
     * @return
     */
    public String enQrCodeOneContact(ArrayList<String> nameCard){

        StringBuilder ss = new StringBuilder();
        ss.append(String.format("BEGIN:VCARD\n" +
                "VERSION:3.0\n" +
                "N:%s",nameCard.get(0)))
                .append(String.format("\nTEL;iPhone;VOICE:%s",nameCard.get(1)))
                .append("\nORG:" + nameCard.get(2))
                .append("\nTITLE:"+nameCard.get(3))
                .append("\nROLE:"+nameCard.get(4))
                .append("\nEMAIL:"+nameCard.get(5))
                .append("\nADR:"+nameCard.get(6))
                .append("\nEND:VCARD");
        return ss.toString();

    }



}

名片是采用公用的VCARD格式,不清楚的童鞋请参考:

http://blog.csdn.net/johnsuna/article/details/8482454

就是把各个字段对应起来,代码里注释也很清楚了。

另外,这个生成二维码字符创长度是有限的,内容不易过多。。。。


  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值