Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Desarrollo en Delphi para Android
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-01-2014
Galahad Galahad is offline
Miembro
 
Registrado: abr 2007
Posts: 218
Poder: 17
Galahad Va por buen camino
Programación Lector de códigos de barras

Hola buenos días...

Tengo un dispositivo Android que tiene un lector de códigos de barras.
Necesito hacer una aplicación que utilice dicho lector para capturar códigos de barras.
(ojo, sin utilizar la cámara de fotos para leer dichos códigos ).

No encuentro documentación al respecto, alguien sabe algo sobre el tema.
Responder Con Cita
  #2  
Antiguo 10-01-2014
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.457
Poder: 20
newtron Va camino a la fama
Hola.

El lector de código de barras lo único que hace es transcribir la lectura que hace como si lo escribieras con el teclado, es decir, no tienes que hacer nada en particular. Si quieres desarrollar una aplicación nativa para android tendrás que usar delphi X... u otra herramienta compatible.
__________________
Be water my friend.
Responder Con Cita
  #3  
Antiguo 11-01-2014
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Nos puedes decir exactamente qué dispositivo es.
Marca/Modelo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 11-01-2014
Galahad Galahad is offline
Miembro
 
Registrado: abr 2007
Posts: 218
Poder: 17
Galahad Va por buen camino
lector de código de barras

Es un lector Honeywell 70e http://www.dolphinblack.com/ .
En cuanto a que funciona como un teclado más, lamento discrepar, no funciona, en mis pruebas solo funciona el lector al utilizar una aplicación de prueba que me he bajado de la web del fabricante.
De dicha web me he bajado un sdk de desarrollo con ejemplos y clases en java, estoy buscando una manera de integrar /utilizar dichas clases con Firemonkey y delphi. ¿ Voy por el buen camino ?, ¿ otra solución ?
Saludos...
Responder Con Cita
  #5  
Antiguo 12-01-2014
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.457
Poder: 20
newtron Va camino a la fama
Cita:
Empezado por Galahad Ver Mensaje
En cuanto a que funciona como un teclado más, lamento discrepar, no funciona, en mis pruebas solo funciona el lector al utilizar una aplicación de prueba que me he bajado de la web del fabricante.
En algunas pdas me he encontrado que para que el lector de código de barras funcione tienes que tener activa una aplicación del fabricante, échale un vistazo a ese aspecto que posiblemente los tiros vayan por ahí.
__________________
Be water my friend.
Responder Con Cita
  #6  
Antiguo 12-01-2014
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿Pero ese dispositivo, cómo lee los códigos de barras?
¿Los lee utilizando la cámara?

Cuando dices que "tiene un lector de código de barras" ¿a qué te refieres exactamente?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 12-01-2014
Galahad Galahad is offline
Miembro
 
Registrado: abr 2007
Posts: 218
Poder: 17
Galahad Va por buen camino
Lector de códigos de barras

Cita:
Empezado por Neftali Ver Mensaje
¿Pero ese dispositivo, cómo lee los códigos de barras?
¿Los lee utilizando la cámara?

Cuando dices que "tiene un lector de código de barras" ¿a qué te refieres exactamente?
No los lee utilizando la cámara, el dispositivo tiene un scanner integrado como el que llevan
los lectores de códigos de barra tradicionales, digamos que es un dispositivo android que lleva incorporado
dicho scanner. El dispositivo tiene una tecla 'Scan', pero dicha tecla no funciona salvo en la aplicación de muestra que he localizado en la web del fabricante.
De dicha web he conseguido bajar el fuente de dicha aplicación de muestra, está hecha en java, si hubiese una manera de utilizar o integrar dichas clases de java. Esta es una muestra de dicho código

Código:
package com.honeywell.samples.decodesampleapi;

import android.app.Activity;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.RemoteException;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import java.io.IOException;

import com.honeywell.decodemanager.DecodeManager;
import com.honeywell.decodemanager.SymbologyConfigs;
import com.honeywell.decodemanager.barcode.DecodeResult;
import com.honeywell.decodemanager.barcode.CommonDefine;
import com.honeywell.decodemanager.symbologyconfig.SymbologyConfigCode39;
import com.honeywell.decodemanager.symbologyconfig.SymbologyConfigCodeAztec;


public final class ScanDemoMainActivity extends Activity {

    private final int ID_SCANSETTING = 0x12;
    private final int ID_CLEAR_SCREEN = 0x13;
    private final int SCANKEY        = 0x94;

    private DecodeManager mDecodeManager = null;
    private EditText mDecodeResultEdit = null;
    private final int SCANTIMEOUT = 2000;
    long mScanAccount = 0;
    private boolean mbKeyDown = true;

    // private String strResultM;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        
        setContentView(R.layout.main); 
        initializeUI();
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
        case KeyEvent.KEYCODE_ENTER:
                try {
                    if (mbKeyDown) {
                        DoScan();
                        mbKeyDown = false;
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            return true;
        case KeyEvent.KEYCODE_BACK:
            this.finish();
            return true;
        case KeyEvent.KEYCODE_UNKNOWN:    
            if(event.getScanCode() == SCANKEY || event.getScanCode() == 87 || event.getScanCode() == 88) {
                try {
                    if (mbKeyDown) {
                        DoScan();
                        mbKeyDown = false;
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            return true;
        default:
            return super.onKeyDown(keyCode, event);
        }
    }

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        switch (keyCode) {
        case KeyEvent.KEYCODE_ENTER:
            try {
                mbKeyDown = true;
                cancleScan();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return true;
        case KeyEvent.KEYCODE_BACK:
            this.finish();
            return true;
            
        case KeyEvent.KEYCODE_UNKNOWN:    
            if(event.getScanCode() == SCANKEY || event.getScanCode() == 87 || event.getScanCode() == 88) {
                try {
                    mbKeyDown = true;
                    cancleScan();
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            return true;
        default:
            return super.onKeyUp(keyCode, event);
        }
    }

    @Override
    protected void onResume() {
        super.onResume();

        if (mDecodeManager == null) {
            mDecodeManager = new DecodeManager(this,ScanResultHandler);
        }
        
        SoundManager.getInstance();
        SoundManager.initSounds(getBaseContext());
        SoundManager.loadSounds();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        menu.add(0, ID_CLEAR_SCREEN, 1, R.string.ClearScreenMenu);

        return true;
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        
        case ID_CLEAR_SCREEN: {
        
            String strPromotScan = this.getResources().getString(R.string.PROMOT_CLICK_SCAN_BUTTON);
            mDecodeResultEdit.setText(strPromotScan);
    
            return true;
        }
        default:
            return false;
        }
    }

    @Override
    protected void onPause() {
        super.onPause();

        if (mDecodeManager != null) {
            try {
                mDecodeManager.release();
                mDecodeManager = null;
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();

        SoundManager.cleanup();
    }

    private void initializeUI() {
        final Button button = (Button) findViewById(R.id.scanbutton);
        mDecodeResultEdit = (EditText) findViewById(R.id.edittext_scanresult);
        
        button.setOnTouchListener(new Button.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                final int action = event.getAction();
                switch (action) {
                case MotionEvent.ACTION_DOWN:
                    button.setBackgroundResource(R.drawable.android_pressed);
                        try {
                            if (mbKeyDown) {
                                DoScan();
                                mbKeyDown = false;
                            }
                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                    break;
                case MotionEvent.ACTION_UP:
                    button.setBackgroundResource(R.drawable.android_normal);
                    try {
                        mbKeyDown = true;
                        cancleScan();
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    break;
                }
                return true;
            }
        });
    }

    private void DoScan() throws Exception {
        try {
            mDecodeManager.doDecode(SCANTIMEOUT);
        } catch (RemoteException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private Handler ScanResultHandler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case DecodeManager.MESSAGE_DECODER_COMPLETE:
                mScanAccount++;
                String strDecodeResult = "";
                DecodeResult decodeResult = (DecodeResult) msg.obj;

                SoundManager.playSound(1, 1);
        
                byte codeid = decodeResult.codeId;
                byte aimid = decodeResult.aimId;
                int iLength = decodeResult.length;

                strDecodeResult = "Decode Result::"+ decodeResult.barcodeData + "\r\n" + "codeid::"+ "(" + String.valueOf((char) codeid) +"/"+  String.valueOf((char) aimid)+")" + "\r\n" + "Length:: " + iLength
                        + "  " + "Count:: " + mScanAccount + "\r\n";
                
                mDecodeResultEdit.setText(strDecodeResult);
                break;

            case DecodeManager.MESSAGE_DECODER_FAIL: {
                
                SoundManager.playSound(2, 1);
                mDecodeResultEdit.setText("Decode Result::Scan fail");

            }
            break;
            case DecodeManager.MESSAGE_DECODER_READY:
            {
                try {
                    //mDecodeManager.disableSymbology(CommonDefine.SymbologyID.SYM_ALL);
                    SymbologyConfigCode39 code39 = new SymbologyConfigCode39();
                    code39.enableCheckEnable(false);
                    code39.enableSymbology(false);
                    code39.setMaxLength(48);
                    code39.setMinLength(2);
                    
                    SymbologyConfigs symconfig = new SymbologyConfigs();

                    symconfig.addSymbologyConfig(code39);
                    mDecodeManager.setSymbologyConfigs(symconfig);
                
                } catch (RemoteException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            break;
            default:
                super.handleMessage(msg);
                break;
            }
        }
    };
    private void cancleScan() throws Exception {
        mDecodeManager.cancelDecode();
    }
}
Responder Con Cita
  #8  
Antiguo 13-01-2014
Galahad Galahad is offline
Miembro
 
Registrado: abr 2007
Posts: 218
Poder: 17
Galahad Va por buen camino
códigos de barras

Cita:
Empezado por newtron Ver Mensaje
En algunas pdas me he encontrado que para que el lector de código de barras funcione tienes que tener activa una aplicación del fabricante, échale un vistazo a ese aspecto que posiblemente los tiros vayan por ahí.
efectivamente tienes razón,, al activar esa aplicación del fabricante, ya funciona el lector en el dispositivo en todas las aplicaciones..... menos las de Firemonkey ;=D
en todas las aplicaciones funciona ese botón ,en firemonkey ese botón lo ignora,, he probado en un edit,un memo,un webbrowser,,, nada,, que no funciona...
Se me agotan las ideas...
Responder Con Cita
  #9  
Antiguo 14-01-2014
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.457
Poder: 20
newtron Va camino a la fama
Pues vaya putada, siento no poder ayudarte en eso.
__________________
Be water my friend.
Responder Con Cita
  #10  
Antiguo 17-01-2014
Galahad Galahad is offline
Miembro
 
Registrado: abr 2007
Posts: 218
Poder: 17
Galahad Va por buen camino
sobre lector de barras

como información, puestos en contacto con embarcadero, nos contestan esto

Cita:
I am afraid that I cannot be of much help with this problem. My understanding is that Firemonkey edit controls are not Dalvik based - they have the look and feel of a Dalvik edit control only so it is not a complete surprise that this software does not work with a Delphi app.
There is a bug logged for the issue - http://qc.embarcadero.com/wc/qcmain.aspx?d=120644. I will add this case to the internal bug report. I do suggest that you add your vote to the QC bug and maybe try to persuade others to do so as well. There is a thread on our forum - https://forums.embarcadero.com/messa...ssageID=614361. The final poster said that he was going to look at using an API for the scanner device itself. As far as I can see, this is the only way that you will get a Delphi application working with this scanner. Perhaps you could try to contact him to see if he implemented anything.
Solución, 'pelearse' con el sdk de java de dicho dispositivo.
Saludos...
Responder Con Cita
  #11  
Antiguo 17-01-2014
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Bueno, tal vez no es la mejor, pero al menos tienes "algo".
Gracias por el feedback.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #12  
Antiguo 10-05-2019
manelb manelb is offline
Miembro
 
Registrado: mar 2017
Posts: 280
Poder: 8
manelb Va por buen camino
Hola Galahad...

Solucionaste este tema??

Estamos valorando la posibilidad de adquirir algún dispositivo de este tipo para inventarios de almacén y estoy recogiendo información al respecto...

Se agradece cualquier comentario: Modelos, marcas, especificaciones, android/WindosCE

Por supuesto es indispensable que funcione el lector de códigos de barra con firemonkey.

Saludos y gracias.
Responder Con Cita
  #13  
Antiguo 11-05-2019
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.457
Poder: 20
newtron Va camino a la fama
Manelb.


En principio yo te recomendaría algún pda android, los terminales windows son caros y cada vez más escasos. Por otro lado cualquiera te debe de valer puesto que el lector de código de barras lo único que hace es pasar a la aplicación que esté activa lo que lea.


Yo he montado algunos de estos, van muy bien y no son excesivamente caros (sobre 500 euros+iva). Aunque los he instalado para trabajar bajo terminal server, ya que estaba, he hecho alguna prueba con una aplicación firemonkey y no he tenido ningún problema que yo recuerde.


Las pruebas con firemonkey las he hecho montando un programa servidor en el ordenador central y haciendo peticiones webservice desde el cliente y la verdad es que se queda una solución bastante elegante para lo que comentas.


Si quieres te puedo mandar el proyecto que hice (servidor+cliente) para que le eches un vistazo, cuando coges la idea es bastante simple.


Saludos
__________________
Be water my friend.
Responder Con Cita
  #14  
Antiguo 11-05-2019
manelb manelb is offline
Miembro
 
Registrado: mar 2017
Posts: 280
Poder: 8
manelb Va por buen camino
Newtron, gracias por tus comentarios...

Supongo que no debo tener problemas, pero me había echo dudar el mensaje de Galahad en el que comentaba que no le funcionaba el lector con firemonkey.
De todas formas el hilo es de hace varios años y todo ha cambiado mucho.

Cita:
Empezado por newtron Ver Mensaje
Si quieres te puedo mandar el proyecto que hice (servidor+cliente) para que le eches un vistazo, cuando coges la idea es bastante simple.
Te agradezco el ofrecimiento pero de momento tengo que hacer algo muy simple.
Si me complico pido auxilio en el foro.

Muchas gracias por todo.
Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
lector no lee codigos de barras generados por componete Barcode ingabraham Varios 5 07-09-2012 01:34:01
lector de codigo de barras sergioperez Tablas planas 4 07-02-2012 10:43:32
hacer funcionar un lector de codigos de barras Ubuntero Providers 3 15-12-2006 06:40:16
Lector de código de barras tiel Windows 1 25-08-2004 01:11:18
Lector de codigo de barras Sotrono Varios 8 15-05-2004 20:05:07


La franja horaria es GMT +2. Ahora son las 11:13:06.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi