在Android Studio

时间:2015-11-15 16:00:38

标签: android android-intent barcode zxing barcode-printing

我想在我的应用上创建条形码/二维码等图像。我已经搜索了很多并找到了不同的库来完成这项任务,但由于我已经在使用Zxing,所以我想在其中工作。

以下是我写的代码:

这是我的扫描仪活动类:

public void handleResult(Result rawResult) {
        // Do something with the result here
        Log.v(TAG, rawResult.getText()); // Prints scan results
        Toast.makeText(SimpleScannerActivity.this, rawResult.toString() + "  WOW scanned", Toast.LENGTH_LONG).show();
        Toast.makeText(SimpleScannerActivity.this, rawResult.getBarcodeFormat().toString(), Toast.LENGTH_LONG).show();
        Log.v(TAG, rawResult.getBarcodeFormat().toString()); // Prints the scan format (qrcode, pdf417 etc.)
        //Intent scanScreenResult= new Intent("com.aaa.fyp.ScanResultScreen");
        setFormat(rawResult);
        Intent nextScreen = new Intent("com.aaa.fyp.ScanResultScreen");
        nextScreen.putExtra("barcode",rawResult.toString());
        nextScreen.putExtra("format", rawResult.getBarcodeFormat().toString());
       finish();
        startActivity(nextScreen);
        }

public  void setFormat(Result result){
    r=result.getBarcodeFormat();
    System.out.println("============================== setformat main"+ r);

}
public BarcodeFormat getFormat(){
    System.out.println("============================== getformat main"+ r);
    return r;

}

在ScanResultScreen活动中使用上述活动的结果。

public class ScanResultScreen extends SimpleScannerActivity {

ImageView scanned;
TextView bc;
TextView f;
String Barcode;
String format;
BarcodeFormat form;
@Override
public void onCreate(Bundle state) {

    super.onCreate(state);
    setContentView(R.layout.scan_screen_with_button);

    ViewGroup layout = (ViewGroup) findViewById(R.id.scanScreenWithButton);


    setContentView(layout);

    Intent prevScreen = getIntent(); // gets the previously created intent

    Barcode=prevScreen.getStringExtra("barcode");
    bc= (TextView)findViewById(R.id.barcode_label);
    bc.setText(Barcode);

    format=prevScreen.getStringExtra("format");
    f=(TextView) findViewById(R.id.format_label);
    f.setText(prevScreen.getStringExtra("format").toString());


    SimpleScannerActivity obj=new SimpleScannerActivity();
    form=obj.getFormat();

    d=(TextView)findViewById(R.id.date_label);
    String formattedDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());
    d.setText(formattedDate);
    Bitmap bitmap = null;
    ImageView iv = new ImageView(this);
    try {


        bitmap = encodeAsBitmap(Barcode, form, 600, 300);

        iv.setImageBitmap(bitmap);

    } catch (WriterException e) {
        e.printStackTrace();
    }

    layout.addView(iv);




}
private static final int WHITE = 0xFFFFFFFF;
private static final int BLACK = 0xFF000000;

Bitmap encodeAsBitmap(String contents, BarcodeFormat format, int img_width, int img_height) throws WriterException {
    String contentsToEncode = contents;
    if (contentsToEncode == null) {
        return null;
    }
    Map<EncodeHintType, Object> hints = null;
    String encoding = guessAppropriateEncoding(contentsToEncode);
    if (encoding != null) {
        hints = new EnumMap<EncodeHintType, Object>(EncodeHintType.class);
        hints.put(EncodeHintType.CHARACTER_SET, encoding);
    }
    MultiFormatWriter writer = new MultiFormatWriter();
    BitMatrix result;
    try {
        result = writer.encode(contentsToEncode, format, img_width, img_height, hints);
    } catch (IllegalArgumentException iae) {
        // Unsupported format
        return null;
    }
    int width = result.getWidth();
    int height = result.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] = result.get(x, y) ? BLACK : WHITE;
        }
    }

    Bitmap bitmap = Bitmap.createBitmap(width, height,
            Bitmap.Config.ARGB_8888);
    bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
    return bitmap;
}

private static String guessAppropriateEncoding(CharSequence contents) {
    // Very crude at the moment
    for (int i = 0; i < contents.length(); i++) {
        if (contents.charAt(i) > 0xFF) {
            return "UTF-8";
        }
    }
    return null;
}

现在我在变量&#34; form&#34;中得到一个Null值。即使我能够在第二个活动中通过传递意图获取barcodeFormat,但它在String类型中。虽然我在这里使用的内置方法需要在Zxing中提供的BarcodeFormat中。

帮助!!

1 个答案:

答案 0 :(得分:0)

BarcodeFormat是一种枚举类型。如果要传递String值,则必须将其转换为BarcodeFormat。

例如,传递条形码格式“AZTEC”:

BarcodeFormat format = Enum.valueOf(BarcodeFormat.class, "AZTEC");