# Brauche Hilfe bei Code Snippet



## Pulvertoastmann (6. Apr 2012)

Hey,
habe eine App gemacht und dabei einen Teil (Aufbauen der RFCOMM Verbindung) kopiert, weil ich es nicht geschafft habe es selber zu machen, da ich neu bei Java bin. Jetzt bräuchte ich jemanden der mir diesen Teil erklären kann.
Danke schonmal im Voraus,
Gruss



Spoiler: Code





```
protected void connect(BluetoothDevice device) {
		//BluetoothSocket socket = null;
		try {
			socket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
			
			socket.connect();
		
			inputStream = socket.getInputStream();														
			outputStream = socket.getOutputStream();
			int read = -1;
			final byte[] bytes = new byte[2048];
			for (; (read = inputStream.read(bytes)) > -1;) {
				final int count = read;
				handler.post(new Runnable() {
					public void run() {
						StringBuilder b = new StringBuilder();
						for (int i = 0; i < count; ++i) {
							String s = Integer.toString(bytes[i]);
							b.append(s);
							b.append(",");
						}
						String s = b.toString();
						String[] chars = s.split(",");
						sbu = new StringBuffer();  
						 for (int i = 0; i < chars.length; i++) {  
						        sbu.append((char) Integer.parseInt(chars[i]));  
						    }
						if(str != null)
						{		
							sTextView.setText(str + "<-- " + sbu);
							str += ("<-- " + sbu.toString());
						}
						else
						{
							sTextView.setText("<-- " + sbu);
							str = "<-- " + sbu.toString();
						}
						str += '\n';
					}
				}); 
			}
			
		} catch (IOException e) {
			finish();
			return ;
		} finally {
			if (socket != null) {
				try {
					socket.close();	
					finish();
					return ;
				} catch (IOException e)
				}
			}
		}
	}
```


----------



## Marcinek (6. Apr 2012)

Irgentwas, was dann auch von dir kommt? Glaube nicht, dass jetzt jemand diesen Code hier im Detail erklärt.

Vieleicht mal die unbekannten Codestücke bei google nachfragen? Hier wird jetzt keine Magie verwendet.


----------



## ARadauer (7. Apr 2012)

was genau das zwischen 14 und 40? das hat eigentlich nix mit rfcomm zu tun.


----------



## schlingel (7. Apr 2012)

Sogar wenn man wollte, fehlen hier essentielle Informationen. 

Was ist das handler-Objekt? View? Irgend etwas anderes?

Wo kommt str her?

Warum ist sbu eine Instanzvariable? Wo wird die außerhalb der Methode verwendet?

Warum wandelt diese seltsame Schleife alle erhaltenen Bytes in Strings um die wiederum per Kommas getrennt sind nur im sie im nächsten Schritt wieder aufzutrennen und die einzelnen Zeichen als einen String zu verwenden? Was soll die Methode überhaupt tun?

Der Code wirkt etwas wirr.


----------



## Pulvertoastmann (8. Apr 2012)

Hey,
ja sry da fehlen echt einige Angaben.

Die Variablen werden hier aufgesetzt und die klasse ist folgende:


```
public class Client extends Activity											// main
{
	private static final int REQUEST_DISCOVERY = 0x1;							// Flag für den Start der Suche
	private Handler handler = new Handler();									// Handler definieren
	private BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();	// Bluetooth Adapter definieren
	
	private BluetoothSocket socket = null;										// Socket aufsetzen und löschen
	private TextView sTextView;													// TextView Variable aufsetzen
	private String str;															// String Speicher
	private OutputStream outputStream;											//
	private InputStream inputStream;											// 
	private StringBuffer sbu;													// Zwischenspeicher für Strings
```

sbu wird sonst nirgends verwendet nur in dieser Funktion, str auch. Die Funktion sollte das, aus einer Liste angeklicktes Gerät verbinden. Wie es genau Funktioniert verstehe ich aber nicht.
Gruss


----------



## schlingel (8. Apr 2012)

Das ist ganz einfach: Die Verbindung wird mit diesen Zeilen aufgebaut:

```
socket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")); // erzeugt das Bluethooth-Socket-Objekt von der gegebenen UUID. Laut Doku ist die übergebene UUID die eines Standard-Bluethooth-Boards
            
            socket.connect(); // Baut die verbindung auf
        
            inputStream = socket.getInputStream(); // wie bei TCP/UDP auch, jetzt kannst du vom socket lesen                                                 
            outputStream = socket.getOutputStream(); // und darauf schreiben
```

Der Rest des Codes ist nur eine sehr umständliche Art raus zu schreiben was die Gegenseite rüberschickt.


----------



## Pulvertoastmann (8. Apr 2012)

@Schlingel

Hey, das heisst alles andere könnte ich weg lassen und ich könnte mich trotzdem Verbinden und "schreiben" aber nicht mehr lesen was von der anderen Seite kommt?
Da ist noch was das ich nicht verstehe, woher weis ich was für eine UUID ich eingeben muss? Woher kommt diese Nummer?
Gruss


----------



## schlingel (9. Apr 2012)

Schreiben und Lesen wickelst du mit dem OutputStream und dem InputStream ab. Schreiben und Lesen kannst du schon, wenn du den jeweiligen Stream offen hast.

Bzgl. UUID - Aus der Doku. Entweder du weißt ganz genau welches Bluetooth-Device du ansprechen willst und besitzt die UUID oder du horchst auf Bluetooth-Intents in deiner App. Siehe auch hier.


----------



## Pulvertoastmann (9. Apr 2012)

Hey,
Danke viel mal für deine Hilfe, hat mich weitergebracht, hab aber noch eine letzte Frage:
Diese UUID die ich benutzte ist für die Standart SPP Verbindung, stimmt das?
Gruss


----------



## Marcinek (9. Apr 2012)

Android lesen von Bluetooth daten SPP - Android Forum - AndroidPIT


----------



## Pulvertoastmann (11. Apr 2012)

Hey, 
sry dass ich erst jetzt zurück schreibe.
Hatte den Thread bereits gesehen, war mir aber nicht sicher.
In dem Fall stimmt das wohl, danke für die Antwort.
Gruss


----------

