Daten vom Smartphone zum PC (Javaprogramm) übertragen


#1

Hallo zusammen,

nochmals danke für die Hilfe in meinem letzten Thread bezüglich BlueCove library.

Nun funktioniert das Programm und zeigt mir schon mein Smartphone an.
Eine kleine App habe ich auch schon gemacht und auch diese funktioniert.

Nun suche ich schon die ganze Zeit eine Anleitung die mir erklärt wie ich Daten vom Smartphone zum PC in mein Java programm übertrage.

Eingentlich will ich nur einen int wert vom Smartphone zum PC senden per Bluetooth.

Leider finde ich im Netz nur Anleitungen, wie man Daten zu einem Server oder einem Smartphone überträgt. Aber keine wie ich die Daten zum PC übertrage.

Habt ihr eine gute Anleitung die erklärt was man dazu alles machen muss?
Die auch den Sourcecode erklärt.

SG


#2

Wenn du schon Zugriff auf die Dateiebene deines Smartphones hast, sind m.M.n. Streams geeignet, um Daten zu übertragen. Insofern sollten die Anleitungen, die du im Netz gefunden hast, funktionieren.
Aber vielleicht kannst du ja noch etwas konkretere Aussagen machen, wobei du Probleme hast.


#3

Momentan zeigt mir mein Programm nur an, das es in der Nähe ein Smartphone gibt.
Er zeigt den Namen und die Bluetooth adresse des Smartphones an.

Das war es aber schon wieder.

Nun habe ich gar keine Ahnung wie ich Daten vom Smartphone empfangen kann.

Hier stecke ich nun fest, da ich keine Anleitung finde die Erklärt wie ich die Daten empfangen kann. In meinem Fall einfach den int Wert vom Handy empfangen und im Programm in eine Variable schreiben.

SG


#4

Dein Rechner sollte dein Smartphone doch auch finden und ins Dateisystem einbinden, oder?
Mit der java.io-API bzw. java.nio-API solltest du doch dann Zugriff auf die Dateiebene deines Smartphones erhalten.


#5

Folgenden code habe ich mir mal zusammen kopiert:

public class BluetoothDeviceDiscovery implements DiscoveryListener{

private static Object lock = new Object();
public static ArrayList<RemoteDevice> devices;

public BluetoothDeviceDiscovery()
{
devices = new ArrayList<RemoteDevice>();
}

public static void main(String[] args) throws IOException{

BluetoothDeviceDiscovery bluetoothDeviceDiscovery = new BluetoothDeviceDiscovery();

LocalDevice localDevice = LocalDevice.getLocalDevice();
DiscoveryAgent agent = localDevice.getDiscoveryAgent();

agent.startInquiry(DiscoveryAgent.GIAC, bluetoothDeviceDiscovery);

System.out.println("Adresse: " + localDevice.getBluetoothAddress());
System.out.println("Name:" + localDevice.getFriendlyName());

try {
synchronized(lock){
lock.wait();
}
}
catch (InterruptedException e){
e.printStackTrace();
}

int deviceCount=devices.size();
System.out.println(deviceCount);

if(deviceCount <= 0){ 
System.out.println("Keine Geräte gefunden."); 
} 
else{ 
System.out.println("Geräte gefunden:"); 
for(int i = 0; i < deviceCount; i++) 
{ 
      RemoteDevice remoteDevice=(RemoteDevice)devices.get(i); 
      System.out.println((i+1) + "" + remoteDevice.getBluetoothAddress() + "" + (remoteDevice.getFriendlyName(true))); 
} 
}
}
public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) 
{ 
System.out.println("Device gefunden:" + btDevice.getBluetoothAddress());  
if(!devices.contains(btDevice)){
   devices.add(btDevice); 
}
} 
 public void servicesDiscovered(int transID, ServiceRecord[] servRecord){ 

 UUID[] uuidSet = new UUID[1];
 uuidSet[0]=new UUID(0x1105); 
 
int[] attrIDs =  new int[] 
{
0x0100 
}; 
    try {
        synchronized(lock){
            lock.wait();
        }
    }
    catch (InterruptedException e) {
        e.printStackTrace();
        return;
    } 
} 
public void serviceSearchCompleted(int transID, int respCode) { 
} 
public void inquiryCompleted(int discType) 
{ 
synchronized(lock){ lock.notify();
} 
}
}

Was muss ich jetzt noch alles machen?
Ich komme einfach nicht weiter.
Die Erklärungen im Netz sind für jemanden der noch nie mit Bluetooth unter Java gearbeitet hat fast nicht zu gebrauchen.


#6

Ich habe jetzt mal den InputSream hizugefügt:

public void serviceSearchCompleted(int transID, int respCode) {

 InputStream inputstream;
try {
	inputstream = new FileInputStream("");

	 int test = inputstream.read();

	 inputstream.close();
} catch (FileNotFoundException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} catch (IOException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
}

Was schreibe ich jetzt hier rein: “inputstream = new FileInputStream(”???");"

Ich muss ja dem FileInputStream jetzt sagen, von wo er die Daten lesen soll?

SG


#7

Wenn du Dateien senden oder empfangen willst, brauchst du die Geräteadresse von deinem Smartphone.
Kannst du die ermitteln? Wird die mit deinem Code auf der Console ausgegeben? Sind die Geräte bereits gekoppelt?
In meinem Linux erscheint das gekoppelte Smartphone nicht, wie zuerst angenommen, im Dateisystem. Vielmehr wird wohl eine Direktverbindung aufgebaut. Das bedeutet wohl, dass die Adresse des Smartphones zunächst ermittelt werden muss. Wie das mit der Kopplung mit Hilfe der von dir eingesetzten API funktioniert, sieht man bisher nicht.


#8

Die Adresse bekomme ich mit:

remoteDevice.getBluetoothAddress();

Ich weiß nicht ob die Geräte gekoppelt sind.

Unter Windows wird das Smartphone angezeigt, somit gehe ich einmal davon aus das sie es sind.

Dann muss ich einfach nur die Geräte-Adresse in den Klammern angeben?

inputstream = new FileInputStream("Adresse des Gerätes");

?


#9

Ich habe mir mal die erste Seite, insbesondere das Quick-Tutorial der BlueCove-API-Doc angesehen.
Hast du die Beispiele mal ausprobiert? Die Klassen OBEXPutClient und OBEXPutServer scheinen Vorstufen von dem zu sein, was du machen willst.
Die Datenübertragung per Stream wird von der API gekapselt. Ich habe mich nicht weiter reingelesen.


#10

Diese Beispiele kenne ich schon.
Es bringt mir leider nichts Source einfach nur zu kopieren.
Ich muss verstehen was da passiert, dazu muss das ganze auch erklärt sein.

Trotzdem Danke!

SG


#11

Ohne, dass man sich mit den einfachen Dingen nicht wenigstens mal auseinandersetzt und damit rumspielt, wird man sicher kaum kompliziertere Sachen bauen können.
Hast du die Beispiele mal ausprobiert?


#12

Sorry, für die späte Antwort.

Habe mich jetzt eine Zeit lang mal mit der App beschäftigt.

Ich habe jetzt folgenden Code zusammen kopiert aus dem Netz:

public class BluetoothDeviceDiscovery implements DiscoveryListener{

private static Object lock = new Object();
public static ArrayList<RemoteDevice> devices;

public BluetoothDeviceDiscovery(){
   devices = new ArrayList<RemoteDevice>();
}

public static void main(String[] args) throws IOException {
BluetoothDeviceDiscovery bluetoothDeviceDiscovery = new BluetoothDeviceDiscovery();

LocalDevice localDevice = LocalDevice.getLocalDevice();
System.out.println("Address: "+localDevice.getBluetoothAddress());
System.out.println("Name:" +localDevice.getFriendlyName());

DiscoveryAgent agent = localDevice.getDiscoveryAgent();

System.out.println("Starting device inquiry…");
agent.startInquiry(DiscoveryAgent.GIAC, bluetoothDeviceDiscovery);

try {
synchronized(lock){
lock.wait();
}
}
catch (InterruptedException e) {
e.printStackTrace();
}

System.out.println("Device Inquiry Completed." );

int deviceCount=devices.size();
System.out.println("Zahl:"+deviceCount);

if(deviceCount <= 0){ 
System.out.println("No Devices Found ."); } 
else{ 

System.out.println("Bluetooth Devices:" ); 
for (int i = 0; i < deviceCount; i++) 
{ 
      RemoteDevice remoteDevice=(RemoteDevice)devices.get(i); 
      System.out.println((i+1)+"" +remoteDevice.getBluetoothAddress()+""+     (remoteDevice.getFriendlyName(true))); 
      } 
}
}
public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) 
{ 
System.out.println("Device discovered:"+  
btDevice.getBluetoothAddress()); 

if(!devices.contains(btDevice))
{ devices.add(btDevice); 
}
} 
public void servicesDiscovered(int transID, ServiceRecord[] servRecord) { 
} 
public void serviceSearchCompleted(int transID, int respCode) { 

 InputStream inputstream;
try {
	inputstream = new FileInputStream("1B0E17E30C012");

	 inputstream.close();
} catch (FileNotFoundException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} catch (IOException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
 } 
 public void inquiryCompleted(int discType) 
{ 
synchronized(lock){ 
	lock.notify();
} 
}
}

Nun weiß ich nicht, wie ich Daten vom Smartphone empfangen kann.


#13

Bis hier her funktioniert auch alles, das Smartphone wird erkannt.
Nun weiß ich nur nicht, wie ich die Daten empfangen kann.

Da hab ich mal mit dem InputStream herumprobiert.
Doch das hat garnicht funktioniert.