2013-01-02 35 views
1

我想在QR码中编码一个字符串,从而影响ZXING库。这是代码对应于该行:使用ZXING在QRCode中编码

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应用程序,它也会很棒。

+2

您可以添加一些日志.. –

+0

您是否在您使用的设备上安装了条形码扫描仪? – FoamyGuy

+0

你使用模拟器还是真实的设备? –

回答

0

这条线:

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

标识活动你的意图调用。为了使其工作,该设备上必须存在活动。如果您尚未在您的项目中实施活动(即您的com.google.zxing.client.android包内没有ENCODE课程),则您将从您的项目调用外部应用程序。如果设备/仿真器上没有响应广播的应用程序com.google.zxing.client.android.ENCODE,那么您使用此解决方案将不会获得任何地方的

您或者需要安装一个应用程序,该应用程序将响应com.google.zxing.client.android.ENCODE或找到另一种方式来执行此操作。

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

+0

thx为您的答案。你在我的设备上安装zxing应用程序后就开始工作了。 对于扫描我已经试过了以下几行代码: Intent intent = new Intent(“com.google.zxing.client.android.SCAN”); 意图。putExtra(“SCAN_MODE”,“QR_CODE_MODE”); startActivityForResult(intent,0); 它适用于在我的设备上没有zxing应用程序的情况下扫描qrcode。 现在我正在开发一个应用程序,它必须生成一个包含一些信息的qrcode。所以如果有这种方法做到这一点,而无需调用zxing应用程序,那对我来说会更好 – enzo

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(); 
      } 
    } 
+0

'colorBack'和'colorFront'变量的值是什么? – PinoyCoder

+0

int colorBack = 0xFF000000; int colorFront = 0xFFFFFFFF; – Marckaraujo

-1

不是斑马线库你还可以通过如下意图摆脱QR码字符串:

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

      } 
     } 
    } 

它可能对你有所帮助。

谢谢。