Android(安卓)简单生成二维码名片
16lz
2021-01-26
二维码名片是现在很常见的,这里只是一个简单生成二维码,如果对二维码名片的内容没有过多的要求,可以借鉴一下。生成二维码用的是谷歌的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 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 hints = new Hashtable(); 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 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
就是把各个字段对应起来,代码里注释也很清楚了。
另外,这个生成二维码字符创长度是有限的,内容不易过多。。。。
更多相关文章
- Android视频采集+H264编码
- 在Eclipse中用javadoc给android工程库文件生成API说明文档
- Android扫描二维码及生成二维码Demo
- Android学习之反编译工具介绍
- 详细android gradle 只编译realse版本
- Android(安卓)Jni 学习实战之(一)
- Android(安卓)Studio Json解析生成对应实体类 插件GsonFormat
- TensorFlow for Android(安卓)PB模型的优化
- [Android] ramdisk.img的生成及解压