我姓毕我来庇护你 2025-11-20 19:14 采纳率: 0%
浏览 4

开发安卓程序过程中需要解析二维码中的中文,毫无头绪,不知道该如何处理

处理安卓扫码枪,需要解析二维码内容,内容中包含中文,这个始终没有找到合适的办法进行处理解析,中文都无法处理,扫码枪是支持中文的,插到电脑中是可以正常显示,环境为安卓 8.1,JDK11,需要各位大Pro指点,有偿

  • 写回答

3条回答 默认 最新

  • 紫雾凌寒 新星创作者: 人工智能技术领域 2025-11-20 19:25
    关注

    让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek

    如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞

    1. 关键点分析
      - 要在安卓8.1环境下,使用JDK11解析包含中文的二维码内容。
      - 已知扫码枪支持中文且在电脑上能正常显示,但在安卓程序中解析有困难。
    2. 解决方案
      - 使用ZXing库

      • 添加依赖
        在项目的build.gradle文件中添加ZXing库的依赖。
        groovy implementation 'com.google.zxing:core:3.3.3'
      • 解析代码示例
        ```java
        import android.content.Intent;
        import android.os.Bundle;
        import android.widget.TextView;

      import androidx.appcompat.app.AppCompatActivity;

      import com.google.zxing.Result;
      import com.google.zxing.client.android.IntentIntegrator;
      import com.google.zxing.client.android.IntentResult;

      public class MainActivity extends AppCompatActivity {

         private TextView resultTextView;
      
         @Override 
         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_main);
      
             resultTextView = findViewById(R.id.resultTextView);
      
             IntentIntegrator integrator = new IntentIntegrator(this);
             integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);
             integrator.setPrompt("Scan a barcode");
             integrator.setCameraId(0);  // Use a specific camera of the device
             integrator.setBeepEnabled(false);
             integrator.setBarcodeImageEnabled(false);
             integrator.initiateScan();
         }
      
         @Override
         protected void onActivityResult(int requestCode, int resultCode, Intent data) {
             IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
             if (result != null) {
                 if (result.getContents() == null) {
                     resultTextView.setText("Cancelled");
                 } else {
                     Result rawResult = new Result(result.getContents(), null, null, 0);
                     String decodedText = rawResult.getText();
                     resultTextView.setText(decodedText);
                 }
             } else {
                 super.onActivityResult(requestCode, resultCode, data);
             }
         }
      

      }
      - **使用其他二维码解析库**: - **ZBar库**: - **添加依赖**:在项目的`build.gradle`文件中添加ZBar库的依赖。groovy
      implementation ‘net.sourceforge.zbar:zbar:0.10’
      - **解析代码示例**:java
      import android.content.Intent;
      import android.os.Bundle;
      import android.widget.TextView;

      import androidx.appcompat.app.AppCompatActivity;

      import net.sourceforge.zbar.ImageScanner;
      import net.sourceforge.zbar.Symbol;
      import net.sourceforge.zbar.SymbolSet;

      public class ZBarMainActivity extends AppCompatActivity {

         private TextView resultTextView;
      
         @Override
         protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_main);
      
             resultTextView = findViewById(R.id.resultTextView);
      
             IntentIntegrator integrator = new IntentIntegrator(this);
             integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);
             integrator.setPrompt("Scan a barcode");
             integrator.setCameraId(0);  // Use a specific camera of the device
             integrator.setBeepEnabled(false);
             integrator.setBarcodeImageEnabled(false);
             integrator.initiateScan();
         }
      
         @Override
         protected void onActivityResult(int requestCode, int resultCode, Intent data) {
             IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
             if (result != null) {
                 if (result.getContents() == null) {
                     resultTextView.setText("Cancelled");
                 } else {
      
                     ImageScanner scanner = new ImageScanner();
                     scanner.setConfig(0, ImageScanner.CONFIG_ENABLE, 1);
      
                     byte[] rawData = result.getContents().getBytes();
                     com.google.zxing.common.HybridBinarizer binarizer = new com.google.zxing.common.HybridBinarizer(new com.google.zxing.common.BitMatrix(rawData));
                     com.google.zxing.common.BitMatrix bitMatrix = binarizer.getBlackMatrix();
      
                     net.sourceforge.zbar.Image barcode = new net.sourceforge.zbar.Image(bitMatrix.getWidth(), bitMatrix.getHeight(), "Y800");
                     for (int y = 0; y < bitMatrix.getHeight(); y++) {
                         for (int x = 0; x < bitMatrix.getWidth(); x++) {
                             barcode.setData(y * bitMatrix.getWidth() + x, bitMatrix.get(x, y)? 0xFF : 0x00);
                         }
                     }
      
                     SymbolSet symbolSet = scanner.scanImage(barcode);
                     for (Symbol symbol : symbolSet) {
                         resultTextView.setText(symbol.getData());
                     }
      
                 }
             } else {
                 super.onActivityResult(requestCode, resultCode, data);
             }
         }
      

      }
      ```
      3. 多种解决方案优缺点
      - ZXing库
      - 优点:功能强大,支持多种条码类型,社区支持较好,有丰富文档和示例。
      - 缺点:代码可能相对复杂一些,对于一些简单需求可能有冗余。
      - ZBar库
      - 优点:相对轻量级,解析速度可能较快。
      - 缺点:功能可能没有ZXing全面,社区支持度可能稍低。
      4. 总结
      在安卓开发中解析含中文的二维码,ZXing库是比较常用且功能全面的选择,添加依赖后通过简单的代码实现扫码和解析功能。ZBar库也可作为一种替代方案,根据项目具体需求和对库的熟悉程度来选择使用。

    希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。

    评论

报告相同问题?

问题事件

  • 创建了问题 11月20日