2013-01-02 33 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);  

      } 
     } 
    } 

它可能對你有所幫助。

謝謝。