Bluetooth - empfange Werte anzeigen

  • Antworten:3
gammelT300
  • Forum-Beiträge: 2

20.07.2015, 17:35:37 via Website

Hallo, ich möchte eine App entwickeln, die eine bluetooth-verbindung aufbaut und Messdaten empfängt. Diese sollen einfach angezeigt werden. Durch einen Klick auf ein Button soll man dann die Werte aktualisieren können, siehe Code. Und alles soll, wenn möglich in einer Aktivität umgesetzt werden.

Leider stürzt die app immer, wenn ich sie auf meinem smartphone starte ab. Kann mir jemand weiter helfen?!!

Danke

package com.example.ziel;

import java.io.IOException;
import java.lang.reflect.Array;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Set;
import java.util.UUID;//test

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.TextView;

public class Main_Activity extends Activity implements OnItemClickListener {

private Handler handler;
String value;
Array parts;

ArrayAdapter<String> listAdapter;
ListView listView;
BluetoothAdapter btAdapter;
Set<BluetoothDevice> devicesArray;
ArrayList<String> pairedDevices;
ArrayList<BluetoothDevice> devices;
public static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
protected static final int SUCCESS_CONNECT = 0;
protected static final int MESSAGE_READ = 1;
IntentFilter filter;
BroadcastReceiver receiver;
String tag = "debugging";
String ring= "525,32.565,32.232,52.523,25.112,23.123,23.123,35.127,98.212,23.";
TextView textview1;
TextView textview2;
TextView textview3;
TextView textview4;
TextView textview5;
TextView textview6;
Button button1;


public  void aufteilen() {

    String[] parts = ring.split("\\.");

    textview2.setText("Temp2 "+parts[0]);
    textview3.setText("Temp3 "+parts[1]);
    textview4.setText("Temp4 "+parts[2]);
    textview5.setText("Temp5 "+parts[3]);
    textview6.setText("Temp6 "+parts[4]);




}



Handler mHandler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
        // TODO Auto-generated method stub
        Log.i(tag, "in handler");
        super.handleMessage(msg);
        switch(msg.what){
            case SUCCESS_CONNECT:
                // aktionen
                ConnectedThread connectedThread = new ConnectedThread((BluetoothSocket)msg.obj);
                Toast.makeText(getApplicationContext(), "CONNECT", 0).show();
                String s = "successfully connected";
                connectedThread.write(s.getBytes());
                Log.i(tag, "connected");
                break;
            case MESSAGE_READ: // HIER
                byte[] readBuf = (byte[])msg.obj;
                String string = new String(readBuf);
                Toast.makeText(getApplicationContext(), string, 0).show();
                break;
        }
    }
};
@Override
public void onCreate(Bundle savedInstanceState) {

    textview2 = (TextView) findViewById(R.id.textView2);
    textview3 = (TextView) findViewById(R.id.textView3);
    textview4 = (TextView) findViewById(R.id.textView4);
    textview5 = (TextView) findViewById(R.id.textView5);
    textview6 = (TextView) findViewById(R.id.textView6);
    final Button button1 = (Button) findViewById(R.id.button);
    button1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            ring = "995,32.757,56.454,87.646,56.556,45.457,74.754,57.435,34.463,46";
            aufteilen();
        }});

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    init();
    if(btAdapter==null){
        Toast.makeText(getApplicationContext(), "No bluetooth detected", 0).show();
        finish();
    }
    else{
        if(!btAdapter.isEnabled()){
            turnOnBT();
        }

        getPairedDevices();
        startDiscovery();
    }


}
private void startDiscovery() {
    // TODO Auto-generated method stub
    btAdapter.cancelDiscovery();
    btAdapter.startDiscovery();

}
private void turnOnBT() {
    // TODO Auto-generated method stub
    Intent intent =new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
    startActivityForResult(intent, 1);
}
private void getPairedDevices() {
    // TODO Auto-generated method stub
    devicesArray = btAdapter.getBondedDevices();
    if(devicesArray.size()>0){
        for(BluetoothDevice device:devicesArray){
            pairedDevices.add(device.getName());

        }
    }
}
private void init() {
    // TODO Auto-generated method stub
    listView=(ListView)findViewById(R.id.bConnectedNew);
    listView.setOnItemClickListener(this);
    listAdapter= new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,0);
    listView.setAdapter(listAdapter);
    btAdapter = BluetoothAdapter.getDefaultAdapter();
    pairedDevices = new ArrayList<String>();
    filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    devices = new ArrayList<BluetoothDevice>();
    receiver = new BroadcastReceiver(){
        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            String action = intent.getAction();

            if(BluetoothDevice.ACTION_FOUND.equals(action)){
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                devices.add(device);
                String s = "";
                for(int a = 0; a < pairedDevices.size(); a++){
                    if(device.getName().equals(pairedDevices.get(a))){
                        //hinzufügen
                        s = "(Paired)";
                        break;
                    }
                }

                listAdapter.add(device.getName()+" "+s+" "+"\n"+device.getAddress());
            }

            else if(BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)){
                // macht irgendwas
            }
            else if(BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)){
                // macht irgendwas



            }
            else if(BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)){
                if(btAdapter.getState() == btAdapter.STATE_OFF){
                    turnOnBT();
                }
            }

        }
    };

    registerReceiver(receiver, filter);
    filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
    registerReceiver(receiver, filter);
    filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
    registerReceiver(receiver, filter);
    filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
    registerReceiver(receiver, filter);
}


@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    unregisterReceiver(receiver);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode == RESULT_CANCELED){
        Toast.makeText(getApplicationContext(), "Bluetooth must be enabled to continue", Toast.LENGTH_SHORT).show();
        finish();
    }
}
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                        long arg3) {
    // TODO Auto-generated method stub

    if(btAdapter.isDiscovering()){
        btAdapter.cancelDiscovery();
    }
    if(listAdapter.getItem(arg2).contains("Paired")){

        BluetoothDevice selectedDevice = devices.get(arg2);
        ConnectThread connect = new ConnectThread(selectedDevice);
        connect.start();
        Log.i(tag, "in click listener");
    }
    else{
        Toast.makeText(getApplicationContext(), "device is not paired", 0).show();
    }
}

private class ConnectThread extends Thread {

    private final BluetoothSocket mmSocket;
    private final BluetoothDevice mmDevice;

    public ConnectThread(BluetoothDevice device) {
        // temporäres objekt wird genutzt, welches später zu mmSocket zugewiesen wird,
        // weil mmSocket ist starr
        BluetoothSocket tmp = null;
        mmDevice = device;
        Log.i(tag, "construct");
        // Holt BluetoothSocket um mit gegebenen BluetoothDevice zu verbinden
        try {
            // MY_UUID ist der app's UUID string,wird auch vom servercode genutzt
            tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
        } catch (IOException e) {
            Log.i(tag, "get socket failed");

        }
        mmSocket = tmp;
    }

    public void run() {
        // unterbricht suche, weil es sonst zu sehr verlangsamen würde
        btAdapter.cancelDiscovery();
        Log.i(tag, "connect - run");
        try {
            // Über socket werden die Geräte verbunden, bis eine exception greift

            mmSocket.connect();
            Log.i(tag, "connect - succeeded");
        } catch (IOException connectException) {    Log.i(tag, "connect failed");
            // wenn man nicht verbinden kann, anwendungen schließen
            try {
                mmSocket.close();
            } catch (IOException closeException) { }
            return;
        }

        // Sachen zum managen der Verbindung (in  separaten thread)

    }







    /** Will cancel an in-progress connection, and close the socket */
    public void cancel() {
        try {
            mmSocket.close();
        } catch (IOException e) { }
    }
}

public class ConnectedThread extends Thread {
    private final BluetoothSocket mmSocket;
    private final InputStream mmInStream;
    private final OutputStream mmOutStream;

    public ConnectedThread(BluetoothSocket socket) {
        mmSocket = socket;
        InputStream tmpIn = null;
        OutputStream tmpOut = null;

        // Get the input and output streams, using temp objects because
        // member streams are final
        try {
            tmpIn = socket.getInputStream();
            tmpOut = socket.getOutputStream();
        } catch (IOException e) {
        }

        mmInStream = tmpIn;
        mmOutStream = tmpOut;
    }

    public void run() {
        byte[] buffer;  // buffer store for the stream
        int bytes; // bytes returned from read()

        // Keep listening to the InputStream until an exception occurs
        while (true) {
            try {
                // Read from the InputStream
                buffer = new byte[1024];
                bytes = mmInStream.read(buffer);
                // sendet zu UI-Activity
                mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
                        .sendToTarget();

            } catch (IOException e) {
                break;
            }
        }
    }

    /* Call this from the main activity to send data to the remote device */
    public void write(byte[] bytes) {
        try {
            mmOutStream.write(bytes);
        } catch (IOException e) {
        }
    }

    /* Call this from the main activity to shutdown the connection */
    public void cancel() {
        try {
            mmSocket.close();
        } catch (IOException e) {
        }
    }
}   }


/*public static String convertStreamToString( InputStream is, String ecoding ) throws IOException

{
StringBuilder sb = new StringBuilder( Math.max( 16, is.available() ) );
char[] tmp = new char[ 4096 ];

try {
   InputStreamReader reader = new InputStreamReader( is, ecoding );
   for( int cnt; ( cnt = reader.read( tmp ) ) > 0; )
        sb.append( tmp, 0, cnt );
} finally {
    is.close();
}
return sb.toString();

}*/

Antworten
Sven R.
  • Forum-Beiträge: 1.904

21.07.2015, 10:25:00 via App

Was sagt denn der/die LogCat?

— geändert am 21.07.2015, 10:25:23

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
gammelT300
  • Forum-Beiträge: 2

08.09.2015, 11:08:58 via Website

ich habe jetzt nur die Reihenfolge der funktionen geändert. Dies hat zur Folge dass die App startet und fragt, ob BT angeschaltet werden soll, was auch geschieht. Allerdings wird nicht nach anderen BT-Geräten gesuht und folglich ist kein Verbindungsaufbau möglich.
Liegt das eventl immer noch an der Reihenfolge und ist der Code an sich falsch????

LogCat:

09-08 11:04:31.020 5971-5971/com.example.ziel W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x40e14438)
09-08 11:05:40.680 7627-7627/com.example.ziel I/Adreno200-EGL﹕ : EGL 1.4 QUALCOMM build: AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.01.21.010_msm8625_JB_REL_2.0.3_Merge_release_AU (Merge)
Build Date: 10/26/12 Fri
Local Branch:
Remote Branch: quic/jb_rel_2.0.3
Local Patches: NONE
Reconstruct Branch: AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.01.21.010 + NOTHING

Antworten
michael
  • Forum-Beiträge: 4

06.05.2016, 14:39:15 via Website

hey, ich weiß es ist schon ein Jahr her, aber hast du vielleicht eine Lösung gefunden oder wie hast du die methoden geändert damit es wenigstens angeht

Antworten