Android-二维码生成方法及格式

关于二维码,相信没有没听过的吧,但是很多人想自己生成下二维码,今天我就给大家分享下二维码的生成。

二维码的生成我们使用git上的开源项目zxing的jar包,毕竟二维码的生成原理很复杂,相信大部分人都不明白,所以这里我先给大家说说使用zxing来生成二维码,后面等我阅读完源码再和大家分享二维码的生成原理。

先上zxingjar包   

把该jar包放在libs目录下,然后我们就可以开始编码了

把生成的部分抽取取来,方便调用。这里用到zxing的方法有5个,首先在生成二维码的时候有可能会出错,所以需要抛出异常(WriterException);第二个EncodeHintType,用来设置编码格式,不然生成的有中文的二维码扫出来的结果是中文部分乱码;

	private static final int BLACK = 0xff000000;// 黑色
	private static final int WHITE = 0xffffffff;// 白色
	
	
	/**
	 * 二维码生成
	 * 
	 * @param str
	 * @param widthAndHeight
	 * @return
	 * @throws WriterException
	 */
	private Bitmap createQRCode(String str, int widthAndHeight)
			throws WriterException {
		Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
		hints.put(EncodeHintType.CHARACTER_SET, "utf-8");// 使用utf8编码
		BitMatrix matrix = new MultiFormatWriter().encode(str,
				BarcodeFormat.QR_CODE, widthAndHeight, widthAndHeight, hints);// 这里需要把hints传进去,否则会出现中文乱码
		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] = BLACK;
				} else {// 其他部分则使用白色
					pixels[y * width + x] = WHITE;
				}
			}
		}
		//生成bitmap
		Bitmap bitmap = Bitmap.createBitmap(width, height,
				Bitmap.Config.ARGB_8888);
		bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
		return bitmap;
	}

然后再需要的地方调用就可以了生成了

try {
				qrCodeBitmap = createQRCode("这是二维码测试", 450);
				mQcImage.setImageBitmap(qrCodeBitmap);// set到imageview上显示出来
			} catch (WriterException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

调用时抛出异常,调用createQRCode方法时传递两个参数,第一个二维码内容,第二个生成二维码的尺寸。


好了,都可以生成了把?


好,下面我说说二维码常见的数据类型。

二维码的数据类型大致上有9种:网址、邮箱、电话号码、普通信息、彩信、名片、地理位置、软件、无线WIFI。

1.网址:

估计很多人都知道,二维码可以直接识别http://blog.csdn.net/hjhrq1991这串网址,不过标准的格式是{URLTO:blog.csdn.net/hjhrq1991},

2.邮箱:

邮箱的文法是这样的:{mailto:hjhrq1991@163.com}

3.电话号码:

电话号码的文法:{tel:13713713712}

4.普通信息:

普通信息的文法:{smsto:13800138000:您好,我是demo}

5.彩信:

彩信的文法和普通信息的文法一样,唯一不同就是标识前缀不同,普通信息为smsto,而彩信为mmsto

该文法为{mmsto:13800138000:您好,我是demo}

6.名片:

名片格式有多种,我就不一一介绍,这里我只要介绍下Vcard名片:

Vcard标准格式为:

BEGIN:VCARD
VERSION:1.0
FN:能弄好
TEL;CELL;VOICE:1380013800
TEL;WORK;VOICE:010-62100000
TEL;WORK;FAX:010-62100001
EMAIL;PREF;INTERNET:lzw#lzw.me
URL:http://lzw.me
orG:志文工作室
ROLE:产品部
TITLE:CTO
ADR;WORK;POSTAL:xx市xx路xxx;100101
REV:date
END:VCARD

7.地理位置:

地理位置二维码需要3个参数,第一个为北纬,第二个西经,第三个为海拔;

前缀为geo,因此该文法为{geo:40xxx,-75,200}

8.软件:

软件其实就是到市场上下载,所以前缀为market

{market://details?id=com.tencent.mm}

9.无线WIFI:

无线wifi根据密码情况可分为3种:1)无密码;2)WEP加密;3)WPA/WPA2加密

因此我先说下wifi各部分的情况,标识前缀为WIFI,wifi名为S,密码为P,加密方式为T;

标准文法为:

无密码:{WIFI:S:wifi-8899;P:12345678;T:NOPASS;}或者{WIFI:S:wifi-8899;T:NOPASS;}也可以{WIFI:S:wifi-8899;}

WEP:{WIFI:S:wifi-8899;P:12345678;T:WEP;}

WPA/WPA2:{WIFI:S:wifi-8899;P:12345678;T:WPA;}

使用以上文法来生成二维码均能生成wifi信息,如果wifi信息正确,则可以直接扫描结果连接到wifi上


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 Android Studio 中的 Barcode API 来生成二维码。以下是一个简单的示例代码: 1. 首先,确保你的项目中已经添加了以下依赖项: ``` implementation 'com.google.zxing:core:3.3.0' implementation 'com.journeyapps:zxing-android-embedded:3.0.3' ``` 2. 在你的布局文件中添加一个 ImageView: ```xml <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" /> ``` 3. 在你的活动或片段中,使用以下代码生成并显示二维码: ```java import android.graphics.Bitmap; import android.os.Bundle; import android.widget.ImageView; import androidx.appcompat.app.AppCompatActivity; import com.google.zxing.BarcodeFormat; import com.google.zxing.MultiFormatWriter; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.journeyapps.barcodescanner.BarcodeEncoder; public class MainActivity extends AppCompatActivity { private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = findViewById(R.id.imageView); String text = "Hello, World!"; // 要生成二维码的文本 // 使用 MultiFormatWriter 来生成 BitMatrix 对象 MultiFormatWriter multiFormatWriter = new MultiFormatWriter(); try { BitMatrix bitMatrix = multiFormatWriter.encode(text, BarcodeFormat.QR_CODE, 250, 250); BarcodeEncoder barcodeEncoder = new BarcodeEncoder(); Bitmap bitmap = barcodeEncoder.createBitmap(bitMatrix); imageView.setImageBitmap(bitmap); } catch (WriterException e) { e.printStackTrace(); } } } ``` 这段代码将会在 ImageView 中显示出一个包含 "Hello, World!" 文本的二维码。你可以将 `text` 变量替换为你想要的任何文本。 希望这能帮到你!如果你有任何其他问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值