Impressão via bluetooth

2 respostas
T

Pessoal, estou precisando imprimir em uma impressora que é daquelas não-fiscais com conexão bluetooth. Implementei a classe para discovery e botei o código para enviar alguma coisa para ela pra ver se imprimia.
Quando seleciono a impressora na lista de dispositivos, o celular me pergunta se gostaria de utilizar os recursos de conectividade, e tudo mais.
Então é acessado o código de envio de dados para a a impressora porém nada acontece, eu imagino que seja alguma coisa ridícula, mas ainda não consegui fazer funcionar.

O celular abrindo um texto qualquer e mandando imprimir pelo proprio esquema que ele tem funciona, o texto sai na impressora sem problema.

Alguém sabe o que poderia ser? Lembrando que o erro que aparece ocorre no segundo catch. A mensagem é "Erro2 0"

Abaixo o código:

package bluetooth;

import java.io.IOException;
import java.util.Vector;

import javax.bluetooth.BluetoothStateException;
import javax.bluetooth.DeviceClass;
import javax.bluetooth.DiscoveryAgent;
import javax.bluetooth.RemoteDevice;
import javax.bluetooth.ServiceRecord;
import principal.MainMenu;
import java.io.InputStream;
import java.io.OutputStream;
import javax.bluetooth.DataElement;
import javax.bluetooth.DiscoveryListener;
import javax.bluetooth.LocalDevice;
import javax.bluetooth.UUID;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;
import javax.microedition.io.StreamConnectionNotifier;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.List;

public class InquiryScreen extends List implements CommandListener {

    private MainMenu menu;
    private Command select;
    private Command stopOrBack;
    private Vector devices;
    private static Object lock = new Object();
    private String connectionURL = null;
    private final String SELECT_COMMAND_NAME = "Select";
    
    DiscoveryListener listener = new DiscoveryListener() {

            public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {
                if (!devices.contains(btDevice)) {
                    devices.addElement(btDevice);
                }
            }

            public void serviceSearchCompleted(int transID, int respCode) {
                synchronized (lock) {
                    lock.notify();
                }
            }

            public void inquiryCompleted(int discType) {
                synchronized (lock) {
                    lock.notify();
                }
            }

            public void servicesDiscovered(int transID,
                    ServiceRecord[] servRecord) {
                for (int i = 0; i < servRecord.length; i++) {
                    String url = servRecord[i].getConnectionURL(
                            ServiceRecord.AUTHENTICATE_ENCRYPT, false);
                    if (url == null) {
                        continue;
                    } else {
                        connectionURL = url;
                    }
                }
                synchronized (lock) {
                    lock.notify();
                }
            }
        };

    public InquiryScreen(MainMenu menu) throws BluetoothStateException {

        super("Inquirying...", List.IMPLICIT);
        this.select = null;
        this.menu = menu;
        this.devices = new Vector(5);
        this.addCommand(this.stopOrBack = new Command("Stop", Command.CANCEL, 1));
        this.setCommandListener(this);
        LocalDevice.getLocalDevice().getDiscoveryAgent().startInquiry(DiscoveryAgent.GIAC, listener);
        try {
            synchronized (lock) {
                lock.wait();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        int deviceCount = devices.size();
        if (deviceCount <= 0) {
             Alert alerta = new Alert("Erro");
             alerta.setString("Nenhum dispositivo encontrado");
             Main.display.setCurrent(alerta);
        } else {

            setTitle("Dispositivos encontrados : " + deviceCount);
            for (int i = 0; i < deviceCount; i++) {
                RemoteDevice remoteDevice = (RemoteDevice) devices.elementAt(i);
                try {
                    append(remoteDevice.getFriendlyName(false), null);
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
            if (deviceCount > 0) {
                this.addCommand(this.select = new Command(SELECT_COMMAND_NAME, Command.OK, 1));
            }
        }
    }

    public void commandAction(Command c, Displayable arg1) {
        if (c == this.stopOrBack) {
            if (c.getCommandType() == Command.CANCEL) {
                this.removeCommand(c);
                this.stopOrBack = new Command("Back", Command.BACK, 1);
                this.addCommand(this.stopOrBack);
            } else {
                Main.display.setCurrent(new MainMenu());
            }
        } else {
            if (this.select != null) {
                RemoteDevice remoteDevice = (RemoteDevice) devices.elementAt(this.getSelectedIndex());

                UUID[] searchUuidSet = new UUID[]{new UUID(0x1101)};
                int[] attrIDs = new int[]{0x0100 };

                try {
                    LocalDevice.getLocalDevice().getDiscoveryAgent().searchServices(attrIDs, searchUuidSet, remoteDevice, listener);
                    synchronized (lock) {
                        lock.wait();
                    }
                } catch (Exception ex) {
                    ex.printStackTrace();
                }

                if (connectionURL == null) {
                    Alert alerta = new Alert("Erro");
                    alerta.setString("Connection invalida");
                    Main.display.setCurrent(alerta);
                   
                } else {

                    StreamConnectionNotifier notifier = null;
                    StreamConnection con = null;
                    LocalDevice localdevice = null;
                    ServiceRecord servicerecord = null;
                    InputStream input;
                    OutputStream output;

                    try {

                        notifier = (StreamConnectionNotifier) Connector.open(connectionURL);
                        con = notifier.acceptAndOpen();
                        output = con.openOutputStream();
                        output.write("teste".getBytes());
                        output.flush();
                        output.close();

                        notifier.close();

                    } catch (Exception ex) {
                        Alert alerta = new Alert("Erro2");
                        alerta.setString(ex.getMessage());
                        Main.display.setCurrent(alerta);
                    }
                }


            } else {
                Alert alerta = new Alert("Erro3");
                alerta.setString("Seleção inválida");
                Main.display.setCurrent(alerta);
            }

        }
    }
}

2 Respostas

T

Pessoal, alguem já fez isso e pode dar alguma dica?

M

Eu tenho isso funcionando já testado em varias plataformas (nokia, motorola, samsung). Aparentemente o seu codigo ta correto. Vc ainda está com problemas?

Criado 20 de maio de 2009
Ultima resposta 23 de dez. de 2009
Respostas 2
Participantes 2