使用 zxing 在 Android 项目中将字符串 QR 编码为图像
QR-encode a String to Image in Android project using zxing
我正在尝试创建 a simple Android app, which would display a QR-coded image - by using zxing library。
所以我在我的 Mac OS Yosemite 笔记本上安装了 HomeBrew
、ant
和 maven
并指向 ANDROID_HOME
环境变量到AndroidSDK的位置。
然后我从 GitHub 检查了最新的 zxing 并使用命令 mvn package
构建了它(看起来没有任何错误)(并使用 javac
版本 1.8.0_45).
之后,我在 Eclipse 中用空白 Activity 创建了一个新的 Android 项目,并将 3 个 jar 文件复制到它的 libs
目录中:
- android/libs/core-3.2.1-SNAPSHOT.jar
- android-core/target/android-core-3.2.1-SNAPSHOT.jar
- android/target/android-4.7.4.jar
不幸的是,我在 MainActivity.java 中的简单代码无法编译:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = (ImageView) findViewById(R.id.qrCode);
String qrData = "Data I want to encode in QR code";
int qrCodeDimention = 500;
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(qrData,
null,
Contents.Type.TEXT,
BarcodeFormat.QR_CODE.toString(),
qrCodeDimention);
try {
Bitmap bitmap = qrCodeEncoder.encodeAsBitmap();
imageView.setImageBitmap(bitmap);
} catch (WriterException e) {
e.printStackTrace();
}
}
错误是(这里fullscreen):
BarcodeFormat cannot be resolved
Contents cannot be resolved to a variable
QRCodeEncoder cannot be resolved to a type
QRCodeEncoder cannot be resolved to a type
WriterException cannot be resolved to a type
但同时我可以通过调用tar
工具看到这些(据说Eclipse没有找到)类:
# tar tvfz libs/core-3.2.1-SNAPSHOT.jar | grep -i WriterException
-rwxrwxrwx 0 0 0 0 28 Mai 20:35 com/google/zxing/WriterException.class
# tar tvfz libs/core-3.2.1-SNAPSHOT.jar | grep -i BarcodeFormat
-rwxrwxrwx 0 0 0 0 28 Mai 20:35 com/google/zxing/BarcodeFormat.class
# tar tvfz libs/android-4.7.4.jar | grep -i QRCodeEncoder
-rwxrwxrwx 0 0 0 0 28 Mai 20:39 com/google/zxing/client/android/encode/QRCodeEncoder.class
请问我哪里做错了,为什么 Eclipse 找不到 类?
我也问过我的问题at GitHub。
好的,我已经通过查看 android/src/com/google/zxing/client/android/encode/QRCodeEncoder.java:
解决了我的问题(从字符串生成 QR 编码图像)
这是我的 MainActivity.java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = (ImageView) findViewById(R.id.qrCode);
try {
Bitmap bitmap = encodeAsBitmap(STR);
imageView.setImageBitmap(bitmap);
} catch (WriterException e) {
e.printStackTrace();
}
}
Bitmap encodeAsBitmap(String str) throws WriterException {
BitMatrix result;
try {
result = new MultiFormatWriter().encode(str,
BarcodeFormat.QR_CODE, WIDTH, WIDTH, null);
} catch (IllegalArgumentException iae) {
// Unsupported format
return null;
}
int w = result.getWidth();
int h = result.getHeight();
int[] pixels = new int[w * h];
for (int y = 0; y < h; y++) {
int offset = y * w;
for (int x = 0; x < w; x++) {
pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;
}
}
Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, width, 0, 0, w, h);
return bitmap;
}
此外,我从 Maven repository (here fullscreen 中选取了 core.jar):
最后,Eclipse 无法使用我用 Maven 构建的 jar 文件的原始问题来自 Java 版本 - 将在 Project Properties[=35= 中修复] 或 Eclipse 设置:
我正在尝试创建 a simple Android app, which would display a QR-coded image - by using zxing library。
所以我在我的 Mac OS Yosemite 笔记本上安装了 HomeBrew
、ant
和 maven
并指向 ANDROID_HOME
环境变量到AndroidSDK的位置。
然后我从 GitHub 检查了最新的 zxing 并使用命令 mvn package
构建了它(看起来没有任何错误)(并使用 javac
版本 1.8.0_45).
之后,我在 Eclipse 中用空白 Activity 创建了一个新的 Android 项目,并将 3 个 jar 文件复制到它的 libs
目录中:
- android/libs/core-3.2.1-SNAPSHOT.jar
- android-core/target/android-core-3.2.1-SNAPSHOT.jar
- android/target/android-4.7.4.jar
不幸的是,我在 MainActivity.java 中的简单代码无法编译:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = (ImageView) findViewById(R.id.qrCode);
String qrData = "Data I want to encode in QR code";
int qrCodeDimention = 500;
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(qrData,
null,
Contents.Type.TEXT,
BarcodeFormat.QR_CODE.toString(),
qrCodeDimention);
try {
Bitmap bitmap = qrCodeEncoder.encodeAsBitmap();
imageView.setImageBitmap(bitmap);
} catch (WriterException e) {
e.printStackTrace();
}
}
错误是(这里fullscreen):
BarcodeFormat cannot be resolved
Contents cannot be resolved to a variable
QRCodeEncoder cannot be resolved to a type
QRCodeEncoder cannot be resolved to a type
WriterException cannot be resolved to a type
但同时我可以通过调用tar
工具看到这些(据说Eclipse没有找到)类:
# tar tvfz libs/core-3.2.1-SNAPSHOT.jar | grep -i WriterException
-rwxrwxrwx 0 0 0 0 28 Mai 20:35 com/google/zxing/WriterException.class
# tar tvfz libs/core-3.2.1-SNAPSHOT.jar | grep -i BarcodeFormat
-rwxrwxrwx 0 0 0 0 28 Mai 20:35 com/google/zxing/BarcodeFormat.class
# tar tvfz libs/android-4.7.4.jar | grep -i QRCodeEncoder
-rwxrwxrwx 0 0 0 0 28 Mai 20:39 com/google/zxing/client/android/encode/QRCodeEncoder.class
请问我哪里做错了,为什么 Eclipse 找不到 类?
我也问过我的问题at GitHub。
好的,我已经通过查看 android/src/com/google/zxing/client/android/encode/QRCodeEncoder.java:
解决了我的问题(从字符串生成 QR 编码图像)这是我的 MainActivity.java:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView imageView = (ImageView) findViewById(R.id.qrCode);
try {
Bitmap bitmap = encodeAsBitmap(STR);
imageView.setImageBitmap(bitmap);
} catch (WriterException e) {
e.printStackTrace();
}
}
Bitmap encodeAsBitmap(String str) throws WriterException {
BitMatrix result;
try {
result = new MultiFormatWriter().encode(str,
BarcodeFormat.QR_CODE, WIDTH, WIDTH, null);
} catch (IllegalArgumentException iae) {
// Unsupported format
return null;
}
int w = result.getWidth();
int h = result.getHeight();
int[] pixels = new int[w * h];
for (int y = 0; y < h; y++) {
int offset = y * w;
for (int x = 0; x < w; x++) {
pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;
}
}
Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, width, 0, 0, w, h);
return bitmap;
}
此外,我从 Maven repository (here fullscreen 中选取了 core.jar):
最后,Eclipse 无法使用我用 Maven 构建的 jar 文件的原始问题来自 Java 版本 - 将在 Project Properties[=35= 中修复] 或 Eclipse 设置: