Wie float wert von android App an desktop Applikation per Bluetooth senden?

S

SmartPhone91

Neues Mitglied
1
Hallo zusammen,

ich versuche jetzt schon länger eine Bluetooth-Verbindung zwischen meiner App und meiner desktop Applikation herzustellen.

Doch leider finde ich keine verständliche Anleitung im Internet die mir erklärt, wie ich Daten senden und empfangen kann.

Deshalb schreibe ich hier einen Beitrag, da ich einfach nicht weiterkomme.

Hier mein Sourcecode von der desktop Applikation:

Code:
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();
}
}
}

Hier mein Android source:

Code:
public class MainActivity extends AppCompatActivity implements SensorEventListener
{
   TextView test;
   SensorManager sensormanager;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);

       test =(TextView) findViewById(R.id.textfeld);
       sensormanager = (SensorManager) getSystemService(SENSOR_SERVICE);
       sensormanager.registerListener(this, sensormanager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR), SensorManager.SENSOR_DELAY_NORMAL);
   }


   @Override
   public void onSensorChanged(SensorEvent event) {

       if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
           float[] werte  = event.values;
           test.setText(String.valueOf(werte[1]));
       }
   }

   @Override
   public void onAccuracyChanged(Sensor sensor, int accuracy) {

   }
}
Was brauche ich jetzt damit ich einen „float“ Wert den mir mein Neigungssensor liefert an meine desktop Applikation weiterleiten kann?

Ich bitte euch um Hilfe, da ich mittlerweile echt am verzweifeln bin!

MfG
 
Keiner der mir Helfen kann?
 
Vielen Dank!
Das werde ich heute gleich mal ausprobieren.

LG
 
Hi nicht nur ausprobieren und abschreiben sondern Du solltest auch verstehen was da gemacht wird, und wozu die verschiedenen Methoden da sind. Wie Bluetooth überhaupt funktioniert und vor allen welche Profile Protokolle es gibt.
 
Hallo,

folgenden Code verstehe ich nicht:

Code:
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
// wenn gepaarte Geräte existieren
if (pairedDevices.size() > 0) {
   // Durchgehen der gepaarten Geräte
   for (BluetoothDevice device : pairedDevices) {
           // einem Array die Addresse und den Namen der Geräte hinzufügen
       mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
   }
}

Was bedeutet "Set<BluetoothDevice> pairedDevices"? Das kenne ich so von Java nicht.

Wozu "<>" und welcher Datentype steckt hinter "pairedDevice"?
 
Achso.

Das heißt, hier "Set<BluetoothDevice> pairedDevices" lege ich eine Liste an mit dem Namen: pairedDevices.

Danach schreibe ich die gefundenen Geräte in die Liste mit:

Code:
 = mBluetoothAdapter.getBondedDevices();

Jetzt frage ich nach, ob es in der Liste keinen, einen oder mehrere Einträge gibt:

Code:
if (pairedDevices.size() > 0)

Nun kommt eine ForEach-Schleife:

Code:
for (BluetoothDevice device : pairedDevices)

Hier wird der listen Eintrag in "device" geschrieben und dann von device in ein Array eingefügt.

Hab ich das so Richtig verstanden?
 
Ja
 
  • Danke
Reaktionen: SmartPhone91
Da fehlt noch was.

<BluetoothDevice>

Normalerweise kann eine List Objekte vom Datentyp Objekt aufnehmen. Das will man normalerweise nicht. Man möchte lieber, dass die Liste nur Objekte vom Type BluetoothDevice aufnehmen kann. Um das zuereichen, schreibt man List<BluetoothDevice> list = new List<BluetoothDevice>();.

Das ganze ist nur ein kleiner Ausblick auf ein extrem mächtiges Werkzeug. Rheinwerk Computing :: Java ist auch eine Insel – 7 Generics<T>
Damit kann man sehr viele Dinge extrem vereinfachen, wird bei fehlender Doku sehr schnell unübersichtlich.
 
Hallo @markus.tullius das ist ja alles richtig was du schreibst.
Nur wo erstellt oder benutzt er so eine Liste? Mit oder vom Datentyp „Object“

Deshalb kann ich den Einwand nicht richtig nachvollziehen.
 
Zuletzt bearbeitet:
Ist das hier jetzt ein Array oder eine Liste und wo wird es erzeugt?

Code:
mArrayAdapter.add(device.getName() + "\n" + device.getAddress());

Wenn es ein Array ist, dann muss ich es ja erst einmal erzeugen mit:

Code:
String mArrayAdapter [] = new String[Anzahl];

Hier muss ich ja auch bei Anzahl die größe angeben, das passiert hier auch nicht.
Somit muss das ja eine Liste sein und kein Array wie es im Kommentar gesagt wird:

Code:
// Hinzufügen des Namens und der Adresse in ein Array

Nur wo im Source wird es erzeugt?

SG
 
Ein Array wird es nicht sein das siehst du schon daran das mit der Methode "add" Elemente hinzugefügt werden. Bei einem Feld gibt es die nicht.

Aber ich würde sagen das dies ein Adapter für eine listview ist. Ist im Endeffekt auch eine Liste.

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1);

Schaue dir mal Listview an.
Ich denke du willst die zur Verfügung stehenden Geräte in eine listwiew anzeigen.


android - Wie bekomme ich die Bluetooth-Geräte als Liste?
 
Zuletzt bearbeitet:
jogimuc schrieb:
Hallo @markus.tullius das ist ja alles richtig was du schreibst.
Nur wo erstellt oder benutzt er so eine Liste? Mit oder vom Datentyp „Object“

Deshalb kann ich den Einwand nicht richtig nachvollziehen.

Das war kein Einwand, sondern eine Antwort auf seine Frage. Er hat explizit danach gefragt, und der Teil fehlte in deiner Antwort.

List, ArrayList, LinkedList sind Komponenten des "Collection Framework" von Java. Es wurde in Java 5 eingeführt.

Arrays sind Gebilde, die einen elementaren Nachteil gegenüber der List haben, sie haben eine feste Größe. Man kann keine Elemente zu Laufzeit entfernen oder hinzufügen. Mit List, ArrayList geht das.
 
Hallo @markus.tullius
Irgent wie reden wir beide aneinander vorbei.
Ich habe ihm auf die Frage was das ist
"mArrayAdapter.add(device.getName() + "\n" + device.getAddress()); "
gesagt das es kein Array sein kann sondern eine Liste um genau zu seine in ArrayAdapter was auch eine Liste ist.

ArrayAdapter<String> mArrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1);

So in etwa wird oder müsste die Definition der Variablen aussehen.
Und das ist ganz klar eine Liste.

Auch auf die Frage was den ein "Set"
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
ist habe ich im gesagt das dies änlich einer Liste ist und Ihm einen Link gegeben.

In Post 6 hat er den Code und in Post 8 hat er versucht uns den Code aus seiner sicht zu erklären.
Er wollte wissen ob er es richtig verstanden hat.
Nach meiner Meinung war das richtig deshalb Ja.
In Post 10 kamst du mit deinen Einwand.
Den ich hier an dieser Stelle nicht nachvollziehen konnte.
Erst im Post 12 nach dir fragt er ob es eine Liste oder Array ist.





Aber deshalb müssen wir uns nicht streiten.
Wir sind uns jedenfalls von anfange an einig gewesen das es eine List ist.
Und nun wir er es wohl auch verstanden haben.
 
Zuletzt bearbeitet:
Nochmals danke für die Infos.
Habt ihr auch ein Beispiel für Eclipse, wie ich die Daten vom Smartphone empfangen kann?
Die Links beziehen sich immer auf Android.
Ich habe es mal mit Bluecove versucht, bin mir aber nicht sich ob das damit funktionieren wird.
Ein fertiges Beispiel zum nachschauen wäre toll, da ich im moment nicht weiter komme.

SG
 
Hallo,

nun habe ich auch einen Source für Eclipse:

Leider geht es bei "Searching Devices" nicht mehr weiter.

Komme nicht dahinter warum, irgendwo habe ich was falsch gemacht?

Code:
package bluetooth;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Vector;
import javax.bluetooth.DeviceClass;
import javax.bluetooth.DiscoveryAgent;
import javax.bluetooth.DiscoveryListener;
import javax.bluetooth.LocalDevice;
import javax.bluetooth.RemoteDevice;
import javax.bluetooth.ServiceRecord;
import javax.bluetooth.UUID;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;

public class BluetoothDeviceDiscovery implements DiscoveryListener{
	
	public BluetoothDeviceDiscovery(){
	}
	
	private static Object lock = new Object();
	private static Vector devices = new Vector();
	private static String connectionURL = null;

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

		BluetoothDeviceDiscovery discovery = 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("Searching devices");
	    agent.startInquiry(DiscoveryAgent.GIAC, discovery);

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

	    System.out.println("Device search finished.");
	    
	    int devicesFound = devices.size();

	    if(devicesFound <= 0){
	        System.out.println("No devices found.");
	        System.exit(0);
	    }
	    else{
	        System.out.println("Bluetooth Devices:");
	        for(int i = 0; i<devicesFound; i++){
	            RemoteDevice remoteDevice = (RemoteDevice)devices.elementAt(i);
	            System.out.println((i+1)+"." + remoteDevice.getBluetoothAddress() + "" + remoteDevice.getFriendlyName(true));
	        }
	    }

	    System.out.print("Choose Device index: ");
	    BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));

	    String chosenIndex=bReader.readLine();
	    int index = Integer.parseInt(chosenIndex.trim());

	    RemoteDevice remoteDevice=(RemoteDevice)devices.elementAt(index-1);
	    UUID[] uuidSet = new UUID[1];
	    uuidSet[0] = new UUID("446118f08b1e11e29e960800200c9a66", false);

	    System.out.println("Searching for service");
	    agent.searchServices(null,uuidSet,remoteDevice, discovery);

	    try {
	        synchronized(lock){
	            lock.wait();
	        }
	    }
	    catch (InterruptedException e) {
	        e.printStackTrace();
	    }
	    if(connectionURL==null){
	        System.out.println("Device does not support Simple SPP Service.");
	        System.exit(0);
	    }

	    StreamConnection streamConnection=(StreamConnection)Connector.open(connectionURL);
	    InputStream input = streamConnection.openInputStream();
	    InputStreamReader streamReader = new InputStreamReader(input);
	    BufferedReader bufferReader = new BufferedReader(streamReader);
	    String value = bufferReader.readLine();
	    System.out.println(value);
	}

	public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod){
	    if(!devices.contains(btDevice)){
	        devices.addElement(btDevice);
	    }
	}

	public void servicesDiscovered(int transID, ServiceRecord[] servRecord){
	    if(servRecord!=null && servRecord.length > 0){
	        connectionURL=servRecord[0].getConnectionURL(0,false);
	    }
	    synchronized(lock){
	        lock.notify();
	    }
	}
	public void serviceSearchCompleted(int transID, int respCode){
	}
	public void inquiryCompleted(int discType){
	}
}

Und hier der App source code:

Code:
public class MainActivity extends AppCompatActivity implements SensorEventListener {

    SensorManager sensormanager;
    TextView label, text;
    BluetoothAdapter bluetoothAdapter;
    Intent activatingBluetooth;
    private ArrayList<String> m1ArrayAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sensormanager = (SensorManager) getSystemService(SENSOR_SERVICE);
        sensormanager.registerListener(this, sensormanager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR), SensorManager.SENSOR_DELAY_NORMAL);
        label = (TextView) findViewById(R.id.textman);
        text = (TextView) findViewById(R.id.message);

        Intent setVisible = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
        startActivity(setVisible);
    }

    public void Run() {
        bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

        if (bluetoothAdapter == null) {
            text.setText("Kein Bluetooth gerät");
        }
        if (bluetoothAdapter.isEnabled() == false) {
            activatingBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(activatingBluetooth, 0);
        }
        Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();

        if (pairedDevices.size() > 0) {
            for (BluetoothDevice devices : pairedDevices) {

                m1ArrayAdapter.add(devices.getName() + "\n" + devices.getAddress());
            }
        }

        while (true){

            OutputStream tmpOut = null;
            DataOutputStream mmOutStream = new DataOutputStream(tmpOut);
        }
    }

    private void listPairedBluetoothDevices() {
        Set<BluetoothDevice> pairedDevice = bluetoothAdapter.getBondedDevices();
    }

    private final BroadcastReceiver receiver = new BroadcastReceiver() {
        private ArrayList<String> mArrayAdapter;

        public void onReceive(Context context, Intent intent) {


            String getAction = intent.getAction();

            if (BluetoothDevice.ACTION_FOUND.equals(getAction))

            {

                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                mArrayAdapter.add(device.getName() + "\n" + device.getAddress());

                IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);

                registerReceiver(receiver, filter);
            }
        }
    };

    @Override
    public void onSensorChanged(SensorEvent event){
         if(event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR){
            float[] valueOfSensor = event.values;
            label.setText(String.valueOf(valueOfSensor[1]));
         }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy){
    }
}

Was fehlt jetzt noch für eine Datenübertragung von Smartphone zum PC?

SG
 
Hi ohne mir deinen Code angsehen zu haben fällt mir auf das du deine Methode "Run" nirgentwo aufrufst . Metoden werden eigentlich klein geschrieben Klassen Gross.
 
Ja, das habe ich übersehen. Normalerweise schreibe ich Methoden auch klein.

Probiere es morgen nochmal aus und melde mich dann wieder.

Danke!

SG
 
  • Danke
Reaktionen: jogimuc
Hi also dein Code wird wohl nicht das tun was du erwartest. Denn da fehlt noch viel.
Was du bis jetzt machst ist die Daten der geparten Geräte zu holen. Weiterverarbeiten tust du sie nicht.
Das heißt es können ja mehrere sein also müsstest du den User fragen welches er benutzen will.
Tust du nicht, selber eines festlegen auch nicht.

Eine Verbindung aufbauen auch nicht und Daten senden ebenfalls nicht.

Arbeite bitte den gesamten Artikel durch den ich dir am Anfang gegeben habe.

Bemerken möchte ich auch das die Verbindung u Aufbau in eimen Thread erfolgen sollte.
Sonst wird dein UI Thread crashen.

Von all dem kann ich in deinem Code nichts erkennen.
 
Zuletzt bearbeitet:

Ähnliche Themen

R
  • RalfKahl
Antworten
10
Aufrufe
306
RalfKahl
R
5
Antworten
22
Aufrufe
1.423
590239
5
FabianDev
Antworten
5
Aufrufe
561
swa00
swa00
Zurück
Oben Unten