1

我正在尝试使用 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 应用程序中,它也会很棒。

4

3 回答 3

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();
            }
    }
于 2013-01-13T01:02:50.807 回答
0

这一行:

Intent intent = new Intent("com.google.zxing.client.android.ENCODE");

标识您使用 Intent 调用的Activity 。为了让它工作,Activity 必须存在于设备上。如果您还没有在项目中实现 Activity(也就是说,ENCODE您的com.google.zxing.client.android包中没有类),那么您将从您的项目中调用外部应用程序。如果设备/模拟器上没有响应广播的应用程序,com.google.zxing.client.android.ENCODE那么您将无法使用此解决方案。

您要么需要安装一个可以响应的应用程序,com.google.zxing.client.android.ENCODE要么找到另一种方法来完成它。

可以使用应用程序中的zxing 库自己生成条形码Google Code 上查看该项目以获取一些下载。这将消除您对现有外部应用程序的依赖,提供更彻底的解决方案。

于 2013-01-02T17:42:22.693 回答
-1

除了 Zxing 库,您还可以使用以下意图从 QRCode 获取字符串:

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);    

            }
        }
    }

它可能对你有帮助。

谢谢你。

于 2014-12-26T05:41:09.947 回答