2016-03-23 10 views
0

Ich versuche, diese App zu entwickeln, die & erkennt, verbindet sich mit Bluetooth-Geräten in der Nähe. Ich stieß auf eine NULLPOINTEREXCEPTION, bei der meine App abstürzt. Es stellte sich heraus, dass meine UUID keinen Wert zugewiesen bekam. Jetzt bin ich brandneu auf Android-Entwicklung & Ich weiß nicht, welcher Wert zu meiner UUID zugewiesen werden soll, so dass es nicht abstürzt.Wie kann ich herausfinden, welche UUID meine App benötigt?

Folgendes ist meine ConnectedBTDevice.java, die Verbindung zu anderen Bluetooth-Geräten behandelt.

package vertex2016.mvjce.edu.bluealert; 

import android.bluetooth.BluetoothAdapter; 
import android.bluetooth.BluetoothDevice; 
import android.bluetooth.BluetoothSocket; 
import android.content.pm.ActivityInfo; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

import java.io.IOException; 
import java.util.UUID; 

public class ConnectedBTDevice extends AppCompatActivity { 

    public BluetoothDevice btd; 
    public BluetoothSocket btSocket, tempSocket; 
    private UUID myUUID; 
    ArrayAdapter arr; 
    ListView lv; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_connected_btdevice); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED); 


     arr = new ArrayAdapter(this, android.R.layout.simple_list_item_2); 

     btd = getIntent().getParcelableExtra("BluetoothDevice"); 

     connectBT(); 
     displayStuff(); 

    } 

    public void connectBT() { 
     Thread myThread = new Thread() { 

      public void run() { 
       tempSocket = null; 
       btSocket = null; 

       try { 
        tempSocket = btd.createRfcommSocketToServiceRecord(myUUID); 

       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

       BluetoothAdapter.getDefaultAdapter().cancelDiscovery(); 

       try { 
        tempSocket.connect(); 
        arr.add("CONNECTED TO-->" + btd.getName()); 
       } catch (IOException e) { 
        e.printStackTrace(); 
        try { 
         tempSocket.close(); 
        } catch (IOException e1) { 
         e1.printStackTrace(); 
        } 
       } 


      } 

     }; 
     myThread.start(); 
    } 




    public void displayStuff() 
    { 
     lv = (ListView)findViewById(R.id.connectedBTlistView); 
     lv.setAdapter(arr); 
    } 

} 

Und das ist logcat, der den Fehler zeigt

03-24 00:32:11.254 5772-5772/vertex2016.mvjce.edu.bluealert I/Timeline: Timeline: Activity_idle id: [email protected] time:66442377 
03-24 00:32:11.594 5772-5772/vertex2016.mvjce.edu.bluealert E/ActivityThread: Performing stop of activity that is not resumed: {vertex2016.mvjce.edu.bluealert/vertex2016.mvjce.edu.bluealert.MainActivity} 
                       java.lang.RuntimeException: Performing stop of activity that is not resumed: {vertex2016.mvjce.edu.bluealert/vertex2016.mvjce.edu.bluealert.MainActivity} 
                        at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3377) 
                        at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3458) 
                        at android.app.ActivityThread.access$1200(ActivityThread.java:154) 
                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1350) 
                        at android.os.Handler.dispatchMessage(Handler.java:102) 
                        at android.os.Looper.loop(Looper.java:135) 
                        at android.app.ActivityThread.main(ActivityThread.java:5292) 
                        at java.lang.reflect.Method.invoke(Native Method) 
                        at java.lang.reflect.Method.invoke(Method.java:372) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699) 
03-24 00:32:16.677 5772-5772/vertex2016.mvjce.edu.bluealert I/Timeline: Timeline: Activity_idle id: [email protected] time:66447800 
03-24 00:32:17.811 5772-8519/vertex2016.mvjce.edu.bluealert I/Timeline: Timeline: Activity_launch_request id:vertex2016.mvjce.edu.bluealert time:66448935 
03-24 00:32:18.420 5772-5772/vertex2016.mvjce.edu.bluealert I/Timeline: Timeline: Activity_idle id: [email protected] time:66449543 
03-24 00:32:24.308 5772-5772/vertex2016.mvjce.edu.bluealert I/Timeline: Timeline: Activity_launch_request id:vertex2016.mvjce.edu.bluealert time:66455431 
03-24 00:32:24.593 5772-9062/vertex2016.mvjce.edu.bluealert W/BluetoothAdapter: getBluetoothService() called with no BluetoothManagerCallback 
03-24 00:32:24.611 5772-9062/vertex2016.mvjce.edu.bluealert E/AndroidRuntime: FATAL EXCEPTION: Thread-39196 
                       Process: vertex2016.mvjce.edu.bluealert, PID: 5772 
                       java.lang.NullPointerException: Attempt to invoke virtual method 'long java.util.UUID.getMostSignificantBits()' on a null object reference 
                        at android.os.ParcelUuid.writeToParcel(ParcelUuid.java:129) 
                        at android.bluetooth.IBluetooth$Stub$Proxy.connectSocket(IBluetooth.java:1767) 
                        at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:309) 
                        at vertex2016.mvjce.edu.bluealert.ConnectedBTDevice$1.run(ConnectedBTDevice.java:63) 
03-24 00:32:25.172 5772-5772/vertex2016.mvjce.edu.bluealert I/Timeline: Timeline: Activity_idle id: [email protected] time:66456295 
03-24 00:32:25.945 5772-9062/vertex2016.mvjce.edu.bluealert I/Process: Sending signal. PID: 5772 SIG: 9 

Meine Frage ist: welchen Wert ich zuweisen so myUUID, dass es zu jedem Gerät verbindet ich will? Es tut mir leid, wenn diese Frage dumm klingt, aber ich versuche wirklich, ein klares Bild davon zu bekommen, welche Rolle UUID & spielt, wie es verwendet wird (wie in welchen Werten zugewiesen werden soll).

Ich habe Beiträge wie Android: How do bluetooth UUIDs work? durchlaufen, aber schien nicht die Hauptfrage zu beantworten. Welchen Wert gebe ich meiner UUID zu?

Vielen Dank für Ihre Zeit !!

+0

Mögliche Duplikate von [Android: Wie funktionieren Bluetooth UUIDs?] (Http://StackOverflow.com/Questions/13964342/Android-How-Do-Bluetooth-Uuids-Work) –

+0

Wenn Sie sagen, was Wert ich Zu myUUID so zuweisen, dass es sich mit jedem Gerät verbindet, das ich will? »ist so, als würde ich sagen, ich möchte mit jeder Person sprechen, die ich treffe, und sie 'Bob' nennen. Die UUID ist ein Name, mit dem Sie identifizieren, mit welchem ​​Gerät/welcher App Sie sprechen. Nun, wie man die UUID des Geräts, mit dem man zu kommunizieren versucht, bekommt, hängt vom Hersteller ab (oder versucht Reverse-Engineering-Techniken, um herauszufinden, was es ist) –

+0

Dies ist ein bisschen Vereinfachung - es kann helfen, lesen Sie http://developer.android.com/guide/topics/connectivity/bluetooth.html und speziell http://developer.android.com/guide/topics/connectivity/bluetooth.html#ConnectingDevices –

Antwort

0

Die Geräte, mit denen Sie eine Verbindung herstellen möchten, sollten über eine UUID verfügen, die Sie ermitteln müssen.

Hier ist ein Link zu einer example app (nicht meiner), die Bluetooth-Geräte und -Dienste entdeckt.

Der Autor nutzt die Funktion BluetoothDevice.getUuids().

Verwandte Themen