我正在尝试使用ZXING库对QR码中的字符串进行编码。这是与此对应的代码行:
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button)findViewById(R.id.button1);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.google.zxing.client.android.ENCODE");
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.putExtra("ENCODE_TYPE", "TEXT_TYPE");
intent.putExtra("ENCODE_DATA","HELLO WORLD");
startActivityForResult(intent, 0);
}
});
}
点击按钮后,我有一个“强制关闭”
在查看一些网站后,我们说它只适用于这些行。不幸的是,它不适合我。
请你能提出一些建议让它发挥作用。或者,如果您有其他方法将QRCode生成器集成到我的ANDROID应用程序,它也会很棒。
答案 0 :(得分:4)
恩佐,这是让它运转的另一种方式,试试这个:
private void encode(String uniqueID) {
// TODO Auto-generated method stub
BarcodeFormat barcodeFormat = BarcodeFormat.QR_CODE;
int width0 = 500;
int height0 = 500;
int colorBack = 0xFF000000;
int colorFront = 0xFFFFFFFF;
QRCodeWriter writer = new QRCodeWriter();
try
{
EnumMap<EncodeHintType, Object> hint = new EnumMap<EncodeHintType, Object>(EncodeHintType.class);
hint.put(EncodeHintType.CHARACTER_SET, "UTF-8");
BitMatrix bitMatrix = writer.encode(uniqueID, barcodeFormat, width0, height0, hint);
int width = bitMatrix.getWidth();
int height = bitMatrix.getHeight();
int[] pixels = new int[width * height];
for (int y = 0; y < height; y++)
{
int offset = y * width;
for (int x = 0; x < width; x++)
{
pixels[offset + x] = bitMatrix.get(x, y) ? colorBack : colorFront;
}
}
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
ImageView imageview = (ImageView)findViewById(R.id.qrCode);
imageview.setImageBitmap(bitmap);
} catch (WriterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
答案 1 :(得分:0)
这一行:
Intent intent = new Intent("com.google.zxing.client.android.ENCODE");
标识您使用Intent调用的活动。为了使其工作,Activity必须存在于设备上。如果您尚未在项目中实现Activity(即ENCODE
包中没有类com.google.zxing.client.android
),那么您将从您的系统调用外部应用程序。如果设备/模拟器上没有响应com.google.zxing.client.android.ENCODE
广播的应用程序,那么您使用此解决方案无法随时随地。
您需要安装将响应com.google.zxing.client.android.ENCODE
的应用程序或找到其他方法来执行此操作。
您可以在应用程序中使用 zxing libraries 自行生成条形码。在Google代码中查看项目here以获取一些下载内容。这将消除您对现有外部应用程序的依赖性,从而提供更全面的解决方案。
答案 2 :(得分:-1)
您可以使用以下意图从QRCode获取字符串,而不是Zxing库:
try {
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); // "PRODUCT_MODE for bar codes
startActivityForResult(intent, 0);
} catch (Exception e) {
Uri marketUri = Uri.parse("market://details?id=com.google.zxing.client.android");
Intent marketIntent = new Intent(Intent.ACTION_VIEW,marketUri);
startActivity(marketIntent);
}
活动结果如下:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents = data.getStringExtra("SCAN_RESULT");
Log.v("MESSAGE: ", contents);
Intent in = new Intent(MainActivity2.this,MainActivity3.class);
Bundle b3= new Bundle();
b3.putString("content",contents);
in.putExtras(b3);
startActivity(in);
}
}
}
它可能对您有所帮助。
谢谢。