Hallo Leute Ich habe jetzt ein Problem mit Bluenicecom 3. Ich möchte die Datei zwischen Bluenicecom und meinm Handy transportieren. Die Transportion zwischen PC und Bluenicecom funktioniert gut. Aber beim Handy geht es nicht. Ich habe mit j2me programmiert. Bluenicecom arbeitet im Slavemodul. Und dann habe ich ein Client im Handy herstellt. Der Client sucht nach Bluenicecom und verbindet mit ihm. Bis hier sind alles OK. Danach habe ich wieder zwei Threads geschrieben. Ein ist für inputstream und ander ist für outputstream. Also zuerst sendet das Handy einen Befehl nach Bluenicecom und dann sollt das Handy eine Nachricht vom Bluenicecom empfangen. Hier gibt es aber Problem, das Thread für inputstream funktioniert nicht. Ist dies Prinzip richtig? Kann jemand helfen? Vielen Dank im voraus!
Vielleicht solltest du mal ein bisschen Code posten. Das ganze sollte funktionieren, denn ich habe es beim dem BNC4 genauso gemacht. Ist das Modul auch wirklich mit dem Handy verbunden, das heißt die Connection in Java ist auch richtig offen (einfach mal auf dem Handy ein paar debug ausgaben einbauen). Bin die Woche über leider nicht zu Hause, deswegen habe ich auch keinen Code hier von mir. Gruß Micha
Hallo Micha
Danke für die Antwort. Ich glaube, dass das Modul wirklich mit dem Handy
verbunden ist. Weil das Handy hat schon gefragt ob die Verbindung mit
dem Bluenicecom zuverlässig ist. Und ich habe auch schon mal probiert
das Handy mit einem PC zu verbinden und es hat geklappt.
Hier ist der Code für Kommunikation:
//get URL from funktion servicesDiscovered
ServiceRecord rec = serviceRecord[i];
String url =
rec.getConnectionURL(ServiceRecord.NOAUTHENTICATE _NOENCRYPT,
false);
//bluetooth connect
private void btConnect(final String url){
StreamConnection stream;
try {
stream = (StreamConnection) Connector.open(url);
DataOutputStream out = stream.openOutputStream();
InputStream in = stream.openInputStream();
startWriteThread(out);
startReadThread(in);
} catch (IOException ex) {
ex.printStackTrace();
}
}
ich glaube bis jetzt sind alles richtig. Wenn der Satz "stream
=(StreamConection) Conector.open(url)" durchgeführt wird, fragt das
Handy ob die Verbindung zuverlässig ist.
Hier sind zwei Thread für Read und Write:
StartWriteThread ist noch ok. Aber StartReadThread ist abstürzt bei dem
Satz "in.read".
private void startWriteThread(final OutputStream out) {
Thread writer = new Thread() {
public void run() {
// semaphor available
available = true;
try {
cl_frm.append("write start.\n");
String str = "h";
byte[] byte_arr = str.getBytes();
out.write(byte_arr);
out.flush();
cl_frm.append("write finish\n");
available = false;
} catch (Exception e) {
Alert alert_btConnect_1 = new Alert("Problem","btConnect
write stream error",null, AlertType.INFO);
alert_btConnect_1.setTimeout(5000);
cl_display.setCurrent(alert_btConnect_1);
} finally {
cl_frm.append("Bluetooth write stream closed.");
try {
out.close();
} catch (IOException e) {
Alert alert_btConnect_2 = new
Alert("Problem","btConnect write stream close error",null,
AlertType.INFO);
alert_btConnect_2.setTimeout(5000);
cl_display.setCurrent(alert_btConnect_2);
}
}
}
};
writer.start();
}
private void startReadThread(final InputStream in) {
Thread reader = new Thread() {
public void run() {
while(available == true){}
try {
cl_frm.append("i do try\n");
byte[] byte_arr = null;
int i;
while(true){
cl_frm.append("i do the while\n");
!!!!!!!!// Das Problem ist hier!!!!!!! in.read() abstürzt.
try{in.read();} catch (IOException ex)
{cl_frm.append("can't read");break;}
// int ia = in.read(); // geht auch nicht
// cl_frm.append("get"+ia+" \n");
// if (ia == -1) {
// cl_frm.append("Stop!!!");
//// break;
// }
}
available = false;
} catch (Throwable e) {
Alert alert_btConnect_1 = new Alert("Problem","btConnect
read stream error",null, AlertType.INFO);
alert_btConnect_1.setTimeout(5000);
cl_display.setCurrent(alert_btConnect_1);
} finally {
cl_frm.append("Bluetooth read stream closed.");
try {
in.close();
} catch (IOException ex) {
ex.printStackTrace();
}
Alert alert_btConnect_2 = new Alert("Problem","btConnect
read stream close error",null, AlertType.INFO);
alert_btConnect_2.setTimeout(5000);
cl_display.setCurrent(alert_btConnect_2);
}
}
};
reader.start();
}
}
Micha, weißt du vielleicht wo das Problem ist?
Gruß und vielen Dank im voraus!
Tim
Hi,
also theoretisch sieht das schonmal gut aus.
Ich schreibe mal aus dem Kopf wie ich das gemacht habe (bin am WE wieder
@home und könnte dann direkt in den Code schauen).
Also probiere es erstmal ganz einfach:
1. Du brauchst keine Service Record zum probieren nehmen. Nimm als URL
einfach eine btspp url ... musste mal google, war irgendwie sowas wie
btspp://23:23:43:43: usw .. wobei die zahlen vorne die Adresse des BT
Moduls sind (wie die mac adresse bei einer Netzwerkarte) (die werte für
noauthenticate usw kommen da auch noch mit dazu)
Das schließt schonmal dort einen Fehler aus.
2. Ich habe immer eine Schleife drin
DataOutputStream out;
while(out == null)
{
out = stream.openOutputStream();
}
In der eleganten Version läuft das über einen Thread, im Test steht
solange "Bitte warten" auf dem Bildschirm bis die Verbindung steht.
Die Meldung am Handy meint erstmal nur, ob das Handy eine Verbindung zum
Modul aufbauen darf, sagt aber nichts darüber aus ob die Connection
steht.
Das ganze dann auch für den InputStream machen.
Dann im MC einfach das eingelesen Byte gleich wieder zurückschicken,
dort erstmal noch keine Prüfungen etc machen.
Wenn der Loop dann funktioniert, dann stehen die alle weiteren Wege
offen.
Fazit aus meiner Erfahrung, erstmal alles ganz Simple machen (ohne
Threads etc).
Wenn du dann weißt das die Verbindung klappt kannste das immer noch
schön ausbauen.
Achso noch etwas:
Du schreibst :
>> Aber StartReadThread ist abstürzt bei dem
>> Satz "in.read".
Das deutet schonmal auf ein nicht offene Verbindung hin, in wird wohl
noch null sein.
Wenn noch etwas unklar fragen, Codebeispiele von mir wenn dann wie
gesagt erst am WE.
Gruß
Micha
Hallo Micha Danke sehr für die Tipps. Ich probiere mal. Gruß Tim
Hallo Micha Es hat nicht geklappt. Kannst du mir zeigen wie du die Verbindung aufgebaut hast? Es wäre nett wenn du den Code mir schicken könntest. Meine email ist tim_de09@yahoo.de Vielen Dank! Gruß Tim
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.