2012-05-28 42 views
0

我是一個在發展中地區的新人。我試圖在掃描QR圖像後處理結果。我正在使用Zxing庫。現在只有內容字符串可以檢索任何數據。但我想掃描qr圖像以獲取URL,telno和一個字符串/文本(這將是一個數字量)。 你可以證明,用一個例子我怎樣才能得到telno和文本兩個數據並存儲在字符串中。目前,只有一個SCAN_RESULT存儲在內容中,但我怎樣才能從一個QR碼獲得多個結果。如何抓取zxing掃描結果並使用它們?

private void onQrActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 

    if (requestCode == 0) { 
     if (resultCode == RESULT_OK) { 
      Log.d(TAG, "onActivityResult " + resultCode); 
      String contents = data.getStringExtra("SCAN_RESULT"); 
      String format = data.getStringExtra("SCAN_RESULT_FORMAT"); 
      paymentmsg.setText(contents); 
      value_Qr = Float.parseFloat(contents); 
      // Toast.makeText(this, format, Toast.LENGTH_SHORT).show(); 
      format = data.getStringExtra("SCAN_RESULT_FORMAT"); 
      // Handle successful scan 
     } 
     else if (resultCode == RESULT_CANCELED) { 
      // Handle cancel 
     } 
    } 
} 
+0

據我所知,一個QR碼將只有一個內容,這在'SCAN_RESULT'中。如果你希望有一個包含多個部分的奇怪的QR碼,那很好,但是你*仍然*只會得到一個'SCAN_RESULT',其中包含你在QR碼中輸入的任何組合字符串,你必須是解析這個串入你放進去的任何東西。 – CommonsWare

回答

1

你必須解析結果。結果在內容字符串中。解析內容字符串。 如果你的QR碼是接觸

if(contents.startsWith("BEGIN:")){ 

        String[] tokens = contents.split("\n"); 

        for (int i = 0; i < tokens.length; i++) 
         { 
         System.out.println(" "+tokens[i]); 

         if(tokens[i].startsWith("BEGIN:")) 
         { 
          Type= tokens[i].substring(6); 
         } 
         else if(tokens[i].startsWith("N:")) 
         { 
          Name= tokens[i].substring(2); 
         } 
         else if(tokens[i].startsWith("ORG:")) 
         { 
          Org= tokens[i].substring(4); 
         } 
         else if(tokens[i].startsWith("TEL:")) 
         { 
          Tel= tokens[i].substring(4); 
         } 
         else if(tokens[i].startsWith("URL:")) 
         { 
          Url= tokens[i].substring(4); 
         } 
         else if(tokens[i].startsWith("EMAIL:")) 
         { 
          Email= tokens[i].substring(6); 
         } 
         else if(tokens[i].startsWith("ADR:")) 
         { 
           Adr= tokens[i].substring(4); 
         } 
         else if(tokens[i].startsWith("NOTE:")) 
         { 
           Note= tokens[i].substring(5); 
         } 

         } 

如果你的QR scannrd是URL

else if(contents.startsWith("http://")||(contents.startsWith("www."))){ 

        qr_url= contents; 

如果你的QR掃描的位置QR

else if(contents.startsWith("geo:")){ 

        String delims = "[ , ?q= ]+"; 
        String[] tokens = contents.split(delims); 

        for (int i = 0; i < tokens.length; i++) 
        { 
         System.out.println(" "+tokens[i]); 
         if(tokens[i].startsWith(" geo:")) 
         { 
           qr_latitude= tokens[i].substring(4); 

         } 
        } 
        qr_latitude= tokens[0].substring(4); 
        qr_longitude=tokens[1]; 
        geo_place=tokens[2]; 

等等,你可以解析的結果。它關於如何解析一個字符串的全部內容。

+0

非常感謝@ PatilSagar – sifat

+0

然後你解決了......如果你滿意,請確保你接受這個答案:) –

0

一個QR碼意味着一個掃描結果,當然。您取回字符串,原始字節和其他一些元數據。如果您想將字符串解析爲組件,您必須自己動手,但您可以在應用程序中重新使用core/中的ResultParser類輕鬆完成此操作。

+0

謝謝,我後來發現它是一種味精格式,我必須以我的方式檢索這些字符串。 – sifat

0

我覺得下面這段代碼將幫助您:

ParsedResult tmpParseVcard = ResultParser.parseResult(result.getResult()); 
       AddressBookParsedResult vcardParsedResult = (AddressBookParsedResult) tmpParseVcard; 
       Toast.makeText(MainActivity.this, "VCARD" + Arrays.toString(vcardParsedResult.getPhoneNumbers()), Toast.LENGTH_SHORT).show(); 
       Log.e("Phone number", Arrays.toString(vcardParsedResult.getPhoneNumbers())); 
       Log.e("Phone Type", Arrays.toString(vcardParsedResult.getPhoneTypes())); 

// AddressBookParsedResult - 名片 // SMSParsedResult - 短信...等

相關問題