Impressão via bluetooth

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:

[code]
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);
        }

    }
}

}[/code]

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

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