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 !!
Mögliche Duplikate von [Android: Wie funktionieren Bluetooth UUIDs?] (Http://StackOverflow.com/Questions/13964342/Android-How-Do-Bluetooth-Uuids-Work) –
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) –
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 –