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]