Blackberry QR код декодирования проб в OS 6 - PullRequest
0 голосов
/ 14 февраля 2012

Я использую следующий код для декодера 2D-QR-кода.

package com.test.rim;

import java.util.*;

import net.rim.device.api.barcodelib.*;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.ui.UiApplication;

import net.rim.device.api.ui.component.Dialog;

import com.google.zxing.*;

final class BarcodeScanScreen extends MainScreen{

    BarcodeScanScreen barcodeScanScreen;

    BarcodeScanScreen(){

        BarcodeDecoderListener listener = new BarcodeDecoderListener(){

            public void barcodeDecoded( String rawText )
            {
                Dialog.alert(rawText);
            }
        };

        Hashtable hints = new Hashtable(1);
        Vector formats  = new Vector(1);
        formats.addElement(BarcodeFormat.QR_CODE);
        hints.put(DecodeHintType.POSSIBLE_FORMATS, formats);

        BarcodeDecoder decoder = new BarcodeDecoder( hints );

        try{
            BarcodeScanner scanner = new BarcodeScanner( decoder, listener );
            scanner.getVideoControl().setDisplayFullScreen( true );
            add( scanner.getViewfinder() );
            scanner.startScan();
        }catch (Exception e)
        {
            // Catch errors here
            Dialog.alert("Error:" + e.getMessage());
        }
    }
}

Чтобы запустить этот экран, я запускаю код app.pushScreen(new BarcodeScanScreen()); при нажатии кнопки с предыдущего экрана.

Когда я запускаю код, BarcodeScanScreen запускается правильно, и сканирование также продолжается (так как мигает красный индикатор устройства).Как только я помещаю камеру перед любым действующим кодом 2D-QR, мигание прекращается.Я думаю, это означает, что любой штрих-код успешно декодируется и, следовательно, сканер останавливается.Но метод barcodeDecoded() не запускается, так как на экране не появляется предупреждающий массаж.В чем проблема в моем коде?

Ответы [ 3 ]

1 голос
/ 15 февраля 2012

Я использую этот код в barcodeDecoded(), и он решает мою проблему.

app.invokeLater(new Runnable() {
                    public void run() {
                      try { javax.microedition.media.Manager.playTone(ToneControl.C4, 1000, 100);} catch (MediaException e) { } 
                      app.popScreen(_barcodeScreen);
                      showDecoded(rawText);
                }
            });
            _barcodeScreen.invalidate();
0 голосов
/ 15 февраля 2012

Проблема в том, что вы не останавливаете сканирование после получения данных в BarcodeDecoderListener ;

Сначала посмотрите пример кода, предоставленный именем образца ежевики BarcodeDemo ;

В вашем коде вместо этого:

BarcodeDecoderListener listener = new BarcodeDecoderListener()
{
    public void barcodeDecoded( String rawText )
    {
         Dialog.alert(rawText);
    }
};

Сделайте так:

BarcodeDecoderListener listener =new BarcodeDecoderListener() 
{
public void barcodeDecoded(String rawText) 
{
    try 
    {           
        barcodeScanner.stopScan();
         Dialog.alert(rawText);
    } 
    catch (Exception e) 
    {
        //Catch the Exception
    }                   
}
};
0 голосов
/ 14 февраля 2012

Ваш код выглядит нормально, поэтому единственное, о чем я могу думать, это то, что Dialog.alert не работает успешно, потому что ваш BarcodeScanScreen не может отобразить модальное диалоговое окно поверх него - окно предварительного просмотра видео не может иметь наложение. Попробуйте остановить сканер и вытолкнуть экран предварительного просмотра видео со стека, прежде чем отобразить свое предупреждение.

...